diff --git a/Podfile b/Podfile index 11a5b61..03a67b0 100644 --- a/Podfile +++ b/Podfile @@ -14,6 +14,7 @@ target 'keyBoard' do pod 'MJRefresh', '3.7.9' pod 'SDWebImage', '5.21.1' pod 'DZNEmptyDataSet', '1.8.1' + pod 'lottie-ios', :git => 'https://github.com/airbnb/lottie-ios.git', :branch => 'lottie/objectiveC' pod 'LookinServer', :configurations => ['Debug'] end diff --git a/Podfile.lock b/Podfile.lock index f68bbab..af2edb1 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -19,6 +19,7 @@ PODS: - LookinServer (1.2.8): - LookinServer/Core (= 1.2.8) - LookinServer/Core (1.2.8) + - lottie-ios (2.5.3) - Masonry (1.1.0) - MBProgressHUD (1.2.0) - MJExtension (3.4.2) @@ -32,6 +33,7 @@ DEPENDENCIES: - Bugly - DZNEmptyDataSet (= 1.8.1) - LookinServer + - lottie-ios (from `https://github.com/airbnb/lottie-ios.git`, branch `lottie/objectiveC`) - Masonry (= 1.1.0) - MBProgressHUD (= 1.2.0) - MJExtension (= 3.4.2) @@ -50,17 +52,28 @@ SPEC REPOS: - MJRefresh - SDWebImage +EXTERNAL SOURCES: + lottie-ios: + :branch: lottie/objectiveC + :git: https://github.com/airbnb/lottie-ios.git + +CHECKOUT OPTIONS: + lottie-ios: + :commit: e44ed5a2a0bffa588933e0ca1bd1f0171ffaa096 + :git: https://github.com/airbnb/lottie-ios.git + SPEC CHECKSUMS: AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58 Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31 DZNEmptyDataSet: 9525833b9e68ac21c30253e1d3d7076cc828eaa7 LookinServer: 1b2b61c6402ae29fa22182d48f5cd067b4e99e80 + lottie-ios: b8e2ada09dfff3d1ad5df18d27e1adb7e690680d Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8 MJRefresh: ff9e531227924c84ce459338414550a05d2aea78 SDWebImage: f29024626962457f3470184232766516dee8dfea -PODFILE CHECKSUM: e80851eaead44de926040a227bf16809774cc3d2 +PODFILE CHECKSUM: 049030aa18b7c16780ea2521136c0b79261ff26b COCOAPODS: 1.16.2 diff --git a/Pods/Local Podspecs/lottie-ios.podspec.json b/Pods/Local Podspecs/lottie-ios.podspec.json new file mode 100644 index 0000000..cca7098 --- /dev/null +++ b/Pods/Local Podspecs/lottie-ios.podspec.json @@ -0,0 +1,52 @@ +{ + "name": "lottie-ios", + "version": "2.5.3", + "summary": "Used to natively render vector animations exported from After Effects.", + "description": "Lottie is a mobile library for Android and iOS that parses Adobe After Effects animations exported as json with bodymovin and renders the vector animations natively on mobile and through React Native!\n\nFor the first time, designers can create and ship beautiful animations without an engineer painstakingly recreating it be hand. Since the animation is backed by JSON they are extremely small in size but can be large in complexity! Animations can be played, resized, looped, sped up, slowed down, and even interactively scrubbed.", + "homepage": "https://github.com/airbnb/lottie-ios", + "license": { + "type": "Apache", + "file": "LICENSE" + }, + "authors": { + "Brandon Withrow": "buba447@gmail.com" + }, + "source": { + "git": "https://github.com/airbnb/lottie-ios.git", + "tag": "2.5.3" + }, + "platforms": { + "ios": "8.0", + "osx": "10.9", + "tvos": "9.0" + }, + "exclude_files": "lottie-ios/Classes/include/**/*", + "source_files": "lottie-ios/Classes/**/*", + "osx": { + "exclude_files": [ + "lottie-ios/Classes/PublicHeaders/LOTAnimationTransitionController.h", + "lottie-ios/Classes/Private/LOTAnimationTransitionController.m", + "lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h", + "lottie-ios/Classes/Private/LOTCacheProvider.m", + "lottie-ios/Classes/PublicHeaders/LOTAnimatedSwitch.h", + "lottie-ios/Classes/Private/LOTAnimatedSwitch.m", + "lottie-ios/Classes/PublicHeaders/LOTAnimatedControl.h", + "lottie-ios/Classes/Private/LOTAnimatedControl.m" + ], + "frameworks": [ + "AppKit", + "CoreVideo" + ] + }, + "resource_bundles": { + "Lottie": [ + "Lottie/PrivacyInfo.xcprivacy" + ] + }, + "public_header_files": "lottie-ios/Classes/PublicHeaders/*.h", + "ios": { + "frameworks": "UIKit" + }, + "module_name": "Lottie", + "header_dir": "Lottie" +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index f68bbab..af2edb1 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -19,6 +19,7 @@ PODS: - LookinServer (1.2.8): - LookinServer/Core (= 1.2.8) - LookinServer/Core (1.2.8) + - lottie-ios (2.5.3) - Masonry (1.1.0) - MBProgressHUD (1.2.0) - MJExtension (3.4.2) @@ -32,6 +33,7 @@ DEPENDENCIES: - Bugly - DZNEmptyDataSet (= 1.8.1) - LookinServer + - lottie-ios (from `https://github.com/airbnb/lottie-ios.git`, branch `lottie/objectiveC`) - Masonry (= 1.1.0) - MBProgressHUD (= 1.2.0) - MJExtension (= 3.4.2) @@ -50,17 +52,28 @@ SPEC REPOS: - MJRefresh - SDWebImage +EXTERNAL SOURCES: + lottie-ios: + :branch: lottie/objectiveC + :git: https://github.com/airbnb/lottie-ios.git + +CHECKOUT OPTIONS: + lottie-ios: + :commit: e44ed5a2a0bffa588933e0ca1bd1f0171ffaa096 + :git: https://github.com/airbnb/lottie-ios.git + SPEC CHECKSUMS: AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58 Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31 DZNEmptyDataSet: 9525833b9e68ac21c30253e1d3d7076cc828eaa7 LookinServer: 1b2b61c6402ae29fa22182d48f5cd067b4e99e80 + lottie-ios: b8e2ada09dfff3d1ad5df18d27e1adb7e690680d Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8 MJRefresh: ff9e531227924c84ce459338414550a05d2aea78 SDWebImage: f29024626962457f3470184232766516dee8dfea -PODFILE CHECKSUM: e80851eaead44de926040a227bf16809774cc3d2 +PODFILE CHECKSUM: 049030aa18b7c16780ea2521136c0b79261ff26b COCOAPODS: 1.16.2 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index ca6e5f9..674a8b9 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -19,1116 +19,1398 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 00DAE48C9A4FBCD1FCAA922CA57B45F9 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEE1DAEE2CD1BAB6DBCBC50916263A4 /* SDWebImageDownloaderRequestModifier.m */; }; - 021ACCD4343D154E4782A5ECE222A8DF /* LookinIvarTrace.h in Headers */ = {isa = PBXBuildFile; fileRef = E05CD820CF8075CB902341061803D784 /* LookinIvarTrace.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 042D40751BD2F51FBE9FECD4707CBBE9 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F4DCF85783AA9A1B3A613F5BAC3C0FEC /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0453019EC6578A67B82CF569EC765546 /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 599EA7E2BEEE9D88C43DF182C6A874D1 /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 05E2B7C1DB7528A0BBEA1521BE0DBAF1 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = EA5E2A6BFD8D228A6FF7C7C749D642DB /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06C4E233E7977DB81A24482E69B2D7D7 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9F495B1E192CA5A7EA012DC8524457 /* UIImage+Transform.m */; }; - 0845A6CB7AE77A99CC475BD14101FE87 /* LookinAttrType.h in Headers */ = {isa = PBXBuildFile; fileRef = B12DF9FA146221C01FCE0D22DDBDC890 /* LookinAttrType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08719ABCE689ED74FE7486B1E49DAA6C /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 58AA57BAA26D8C03E401EEFD3C78271F /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 089F3C4BAA46A37EC5763DD312771021 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = BF86BA22A3F81C27DE4346E22477D2CD /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08D50C5AC969A3701B6F9137CF3A10F1 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = BB09D1C81119E88D019FD33037BC5587 /* UIImage+ForceDecode.m */; }; - 09A2ACBC8CE1761652EAA20886AEFE10 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FE87671299E95720DB52DD3375B566E /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B0E6CECDF516BC83756C1D5515A725B /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E70D2DE5FE013503515AE432AE16071A /* SDAsyncBlockOperation.m */; }; - 0B449236AF25C6C11B0DE3D6D0E4A19B /* LookinEventHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F746B8A0D89C293CD78D1EE71CD25FF1 /* LookinEventHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BE3B8DB6034364E7CF3AE9D01C7C0B4 /* CALayer+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBF905BC343AA0D52B6BC0B1E5B22E9 /* CALayer+Lookin.m */; }; - 0C79142D1349DD9A969F47A0A8AAA0CB /* Lookin_PTProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E9E0A3D552DFF9EC45D14794237342 /* Lookin_PTProtocol.m */; }; - 0EF10747EF2A02413E84BD5EF7C87A4B /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 854F1B8C164960BB0D2721562BD6E7E5 /* MJRefreshNormalHeader.m */; }; - 0F1D0F5DCC8C94A4C684DF846D14F436 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE77633CA7FA3526B2AA79AB5F21A42 /* SDWebImagePrefetcher.m */; }; - 0FF9F459ED16719292443A4C99B52B20 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D6CF72BA8B7618D0238AD641B57FE35 /* SDImageCache.m */; }; - 10017B43AC38C3A89D7AC1376C6E7066 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9964200935BD2352FD5DAD8C2AC9FE07 /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 104D9196010D2A8C52C0C19E9C9D52E8 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 16C85770D72E9770C476992A31B3655F /* MBProgressHUD-dummy.m */; }; - 117F4B6F653A8DA2637C5C93B4993884 /* Peertalk.h in Headers */ = {isa = PBXBuildFile; fileRef = ED81CDC30BE2F7BBA09422B3CD1BDF85 /* Peertalk.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11C929E6BFB46F981685446F26DCE605 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D404BDF65C17843DC41C1611EAAA22EB /* MJRefreshAutoFooter.m */; }; - 11D4DC1FCE5647EEA8484AA4A880AF8F /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A6D5DE8BC7E18B47355B8494A426209 /* MBProgressHUD.m */; }; - 126496714AD564062A8C10787CC01B8B /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 47E596E1EB48CB4E8DE37CC0D5122787 /* MJFoundation.m */; }; - 14943D0EE97A4966510A86F5C3FC66A5 /* MJExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 808621872AB88E6448666731EB043018 /* MJExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14CA284AC4FF1EED75E785641EE98034 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F43D293502C6A280429EF2DEFA6C0E6 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 150116E888969E8304BA3E2BB6529461 /* LookinHierarchyFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DAD9E82D42212E9D52E28737BC21479 /* LookinHierarchyFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00DAE48C9A4FBCD1FCAA922CA57B45F9 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 511B766B94F97409E68BCE900C51FBF0 /* SDWebImageDownloaderRequestModifier.m */; }; + 021ACCD4343D154E4782A5ECE222A8DF /* LookinIvarTrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 82E3C2374A5253FD68FB4462AC196C71 /* LookinIvarTrace.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0234D8ACED7765F06930E73AF7D6A75E /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = E5A48023F7A772224B723167DA19F405 /* LOTMask.m */; }; + 028209CE025722D4E6B3F56BDE1CFEF5 /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 11B78563CFB78FEC5CB39AE8C4F051E6 /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 042D40751BD2F51FBE9FECD4707CBBE9 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A4E961169250B80B0A6D7292D81E1B30 /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0453019EC6578A67B82CF569EC765546 /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F40E2A2CFD31DEBCFD012E8AAC7A62E /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 05199FC8B17B8B50F4BCDB4D96B92235 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 340A57C04C907722A2529BC7E5F00245 /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 05C70E42B050AD839F22D728CE18B9CA /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = FC94B8D2FBA4BB61F0F6B44861B426CD /* LOTValueInterpolator.m */; }; + 05E2B7C1DB7528A0BBEA1521BE0DBAF1 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E77C169CB17466002DB92D7552A1CE3 /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06C4E233E7977DB81A24482E69B2D7D7 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 85FF3550CBA0762C4B44F14EA8482B93 /* UIImage+Transform.m */; }; + 0845A6CB7AE77A99CC475BD14101FE87 /* LookinAttrType.h in Headers */ = {isa = PBXBuildFile; fileRef = E8743680BDAB8E9BF9BBF3C0E2E48C05 /* LookinAttrType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08719ABCE689ED74FE7486B1E49DAA6C /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = BFFE0983F070225A46ABB71E0933410E /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 089F3C4BAA46A37EC5763DD312771021 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF1F22BD601A5F02CD4048EFF2FD327 /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08D50C5AC969A3701B6F9137CF3A10F1 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F1D519909A661AAAF2CDDF1A05EB499 /* UIImage+ForceDecode.m */; }; + 09A2ACBC8CE1761652EAA20886AEFE10 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D282562970AE2A018E00D59FFC473E67 /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B039B302AC961B2EB32E02E52E53D8C /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2F6A3AFF295DD9D127E392996B5A22 /* LOTLayer.m */; }; + 0B0E6CECDF516BC83756C1D5515A725B /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 82C59133DD7F96F32B51DDFF5BD8B012 /* SDAsyncBlockOperation.m */; }; + 0B449236AF25C6C11B0DE3D6D0E4A19B /* LookinEventHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4336B050F67799536B9CCB71760576DE /* LookinEventHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BE3B8DB6034364E7CF3AE9D01C7C0B4 /* CALayer+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 982E011815B3BFB8CC0DA38CE9903A44 /* CALayer+Lookin.m */; }; + 0C3167C8509E9C5E8F8571FC3D2A55BD /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D1B0275ADBEF79FAE38A1950474FFE2 /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C79142D1349DD9A969F47A0A8AAA0CB /* Lookin_PTProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = C7CC056AFEDD46E13A5C7EAD5B08267C /* Lookin_PTProtocol.m */; }; + 0EE1D16AA387B18C0D1CA1129FF19E31 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ADF7CDFF2B4A4556008C32C26928527 /* LOTAsset.m */; }; + 0EF10747EF2A02413E84BD5EF7C87A4B /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 53BA5165C83D9DBDC9750CCDD4E14723 /* MJRefreshNormalHeader.m */; }; + 0F1D0F5DCC8C94A4C684DF846D14F436 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 04A97854FF137F06C6D264D54227F0DE /* SDWebImagePrefetcher.m */; }; + 0FF9F459ED16719292443A4C99B52B20 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DC566A25FB8741D124E279E45C71131A /* SDImageCache.m */; }; + 10017B43AC38C3A89D7AC1376C6E7066 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 333B8F2E8C0FCAC3100D466CF1DB108F /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10062AFEC80CE176CF04344AB75B89A9 /* LOTAnimatedSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 56D2A0BD8B870DB83C7E0A0BA8CE24D5 /* LOTAnimatedSwitch.m */; }; + 104D9196010D2A8C52C0C19E9C9D52E8 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 712B592666A1E34B994121F8C4054715 /* MBProgressHUD-dummy.m */; }; + 117F4B6F653A8DA2637C5C93B4993884 /* Peertalk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F24D2100AD72D115D29B29BEFA1D3EB /* Peertalk.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11C929E6BFB46F981685446F26DCE605 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EA68F387E9D6925383885CD76416F72 /* MJRefreshAutoFooter.m */; }; + 11D4DC1FCE5647EEA8484AA4A880AF8F /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA260D791EFA8B3B80F3E71C93AACC6 /* MBProgressHUD.m */; }; + 126496714AD564062A8C10787CC01B8B /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = E634E5633F657786B044C2A918E019C9 /* MJFoundation.m */; }; + 14850B40C2FC9803BF1B3D83BEBD1E49 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = F5D20445A4668215A42B54970DB1F581 /* UIColor+Expanded.m */; }; + 14943D0EE97A4966510A86F5C3FC66A5 /* MJExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C7548F2A8537D1A085C05114169403B /* MJExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14BE7C4F2B82AEDB7C3F99330E307C8D /* LOTKeypath.h in Headers */ = {isa = PBXBuildFile; fileRef = DD4BD5F9BC7ABC0F4807A3F7808B3EE5 /* LOTKeypath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14CA284AC4FF1EED75E785641EE98034 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = A9981422F267218B186F96EBE87E78CD /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 150116E888969E8304BA3E2BB6529461 /* LookinHierarchyFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F695175209CD6A64659C43174FE4E09D /* LookinHierarchyFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15B27182B591769C57B55544260DC886 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - 165F1C9CBD621828C788A3018D0426C5 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = BF679E0482D915265B5050368ABBB701 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 165F1C9CBD621828C788A3018D0426C5 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E4850AE143E84F838F3B42BB41A596B /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16D7DCB7CC985C33EEC41B371C029C84 /* SDWebImage-SDWebImage in Resources */ = {isa = PBXBuildFile; fileRef = CF1281E58AA1045D4B7F33FC56691C42 /* SDWebImage-SDWebImage */; }; - 1708C1D28B421C4AD310426D1695CE77 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD27E7A66F8B685B7056B181A0D4D46 /* SDAnimatedImage.m */; }; - 1754DD5511A7BF462B116F70B0D4006A /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EFBFF769FFEA0B2F71A0E5EDE7DCDDF3 /* SDWebImageOperation.m */; }; - 1830558A4D2D63C8E76BC3136D8213F9 /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B54AFD2BD6CA59B1C3B03B1146FE77F /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18660FA595DBE133BB784E813A7122A8 /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D9C32EDDDB1CA2666760FDE90B64590 /* SDImageHEICCoder.m */; }; - 186B573F1BEB8A23419A02814A7741DB /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = A4E4BD7B01B4DA8E6A41CD86E6AB6B44 /* MJRefreshFooter.m */; }; - 18AD90784D549657DF51BC8377DA3085 /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = F6B25A4160A5D48C609C6C2B58E46DE9 /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B52E938D7999FC0CDA2AA22674948EB /* LookinAttributesGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 1948F2AFCD4F7087CA46FB78E5A05ABD /* LookinAttributesGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B6CE67196EE181E6B56788EFC7E00D3 /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F0FAF8AA7D9999CB7B6AC14DC9F613F /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BC44E2FDD197D5210A23C9CCF1A906B /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 299CDB086FE0568EE14EAB79D7B74437 /* SDWebImageCompat.m */; }; - 1C5CCB87E5B9C500F07A8244D7906295 /* LookinAppInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F6981AC25702BE9417B498391042242 /* LookinAppInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C8B70C74291A3076746C3B18781568E /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AB362641176A92218B886FD83548F6C2 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1CA85ECC202E5CF62530BAD7C0DCDAF2 /* LookinHierarchyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C9BCDBD08949F0C3053B9F87567E0B2 /* LookinHierarchyInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D18A1A5D485D57192B021A8765C0AF5 /* LookinTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = E785CD9E03330FEEAB8EA2F65DA92853 /* LookinTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EA011B45EC780B434507AFB3D9647ED /* NSObject+MJCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = CC6EC6E349C4E8476F9617E9150D43FE /* NSObject+MJCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EC3AEA15AE416A53357261B37C622BD /* LKS_TraceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 46771EF8828C8A7519CEFD7A8DF062BE /* LKS_TraceManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1ECC5F320AEFB120081358B4FFB7442F /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A3B77B219A105E2636BBFACE42D7A8 /* NSString+MJExtension.m */; }; - 1EDC6F899051F0E858270F7556AF2F12 /* UIVisualEffectView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2731C084E8B9BB6A54629DDFEBD14EA1 /* UIVisualEffectView+LookinServer.m */; }; - 1EDF5F5B68D4A76CE59D5B6CC7B6C469 /* LookinAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = F74FD66E160DEA3B30F3C017DE8ED1BA /* LookinAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EE04FF3866D1CDDBEFEBA7F795824AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - 1FD36A180D43C773D95D8E5BF719494C /* LookinDisplayItemDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = A1BB512E1904C9AC07E6CEBA4DE525DB /* LookinDisplayItemDetail.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FDEA3FFA45F29C1331723E9579D66A5 /* LookinAutoLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 528C15198BF77FCE909FB6A717EA8C53 /* LookinAutoLayoutConstraint.m */; }; - 2055774CD703B52DABFB1CC588394A94 /* MJExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7BA44CD5FDF42B32263B5F4259A024 /* MJExtension-dummy.m */; }; - 20D618EF3EA5E3BE96DA24D36E3CA9EF /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BDD492D9CC4757F16B776F8B08A1A49F /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 20E738E52B4712385489A62374C74C7F /* Lookin_PTUSBHub.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8E3573AF9C6E24E9DFBDDB57A91B44 /* Lookin_PTUSBHub.m */; }; - 22516EA77E7120000632C30BD9A03927 /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = B640B3AD2FE955C7A51E5B1F84A61189 /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 231A40F14D020AE2F61AA5C3289E6CF9 /* UITextView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = E9FADEFBF123E3EB09754AA63F0510E1 /* UITextView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2460C08042AF8B7D0492A062F755986E /* NSString+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ED91326A0371ACE08A353BC67F60F6B /* NSString+Lookin.m */; }; - 24E8E4ED0B5D988E3346E6638619F4E4 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F3F601094A8014DC41447620116D80 /* SDImageFrame.m */; }; - 24E963C1D6245F98BAC8A0ACCB7DE987 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6B85BD26EE974026A447B476B2932B /* NSBundle+MJRefresh.m */; }; + 1708C1D28B421C4AD310426D1695CE77 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 334223D1732D9FA282B307802354F822 /* SDAnimatedImage.m */; }; + 1754DD5511A7BF462B116F70B0D4006A /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E202340452802F3A8D507151653F79B4 /* SDWebImageOperation.m */; }; + 1830558A4D2D63C8E76BC3136D8213F9 /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2422FBE983F4A7ED65B9DB61A2C03B6E /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18660FA595DBE133BB784E813A7122A8 /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D9FA99E5DFFE40D7DF6135228A675AF6 /* SDImageHEICCoder.m */; }; + 186B573F1BEB8A23419A02814A7741DB /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B0C2EC8BCDBC5B5B3EF574A6F97CB366 /* MJRefreshFooter.m */; }; + 18AD90784D549657DF51BC8377DA3085 /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DCDEE016EE11CD11BD0E469EEB8197E /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18CA52FD8966E21A2EB03FDD052AB509 /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = 137A4E94A88AFED8DF9942FCD8031663 /* LOTShapeStroke.m */; }; + 1AF38132544C8153908D92971F966999 /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FD4D8E7CBA2328A4C35B1959662111 /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B52E938D7999FC0CDA2AA22674948EB /* LookinAttributesGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF7EEC072D42B930C8EFE40C2BBBE44 /* LookinAttributesGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B6CE67196EE181E6B56788EFC7E00D3 /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 454AE8290CADCF24FC0C50B45EA09057 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1BC44E2FDD197D5210A23C9CCF1A906B /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 09E5CB8850637C7A241D1FE926F62C79 /* SDWebImageCompat.m */; }; + 1C5CCB87E5B9C500F07A8244D7906295 /* LookinAppInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B734EC845D5153E6BC7492F474CFDBB /* LookinAppInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C8B70C74291A3076746C3B18781568E /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A4FFCC7F623FB678107B32EE45246B32 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1CA85ECC202E5CF62530BAD7C0DCDAF2 /* LookinHierarchyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C078EA0AA4B6D603C76542BE652008BF /* LookinHierarchyInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D18A1A5D485D57192B021A8765C0AF5 /* LookinTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F77B39DFBF53F077329B8D1EA698FA6 /* LookinTuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D8F5ECDFB5353E3AB5BECC0E1236B80 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = E589E7D85F68B187C941BFE8E5981A01 /* LOTSizeInterpolator.m */; }; + 1DB279036B5FBBDA16AD04F9CB0B79DF /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 332ED2DB44E7CA9727108143D82CFD47 /* LOTPolygonAnimator.m */; }; + 1EA011B45EC780B434507AFB3D9647ED /* NSObject+MJCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D1ED13B05CDE529BA80C235F5E47F /* NSObject+MJCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EC3AEA15AE416A53357261B37C622BD /* LKS_TraceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C315D01368F7DE8AEF8F434127941764 /* LKS_TraceManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ECC5F320AEFB120081358B4FFB7442F /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = BD7524C4B5AE206A1B0BA415448A7856 /* NSString+MJExtension.m */; }; + 1EDC6F899051F0E858270F7556AF2F12 /* UIVisualEffectView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = ECDB44059BA1D5E4892EF1C33F0559D1 /* UIVisualEffectView+LookinServer.m */; }; + 1EDF5F5B68D4A76CE59D5B6CC7B6C469 /* LookinAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 9593BD74900E6D843CFE9DC5976A8CA8 /* LookinAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F2DE8B4AB97D531543FE3311DED9559 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F1B3D1B25B8C51A1D1CEAAD09874870 /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1FD36A180D43C773D95D8E5BF719494C /* LookinDisplayItemDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FC79C5166C2D3221576CB972A1AAA6E /* LookinDisplayItemDetail.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1FDEA3FFA45F29C1331723E9579D66A5 /* LookinAutoLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = F9E35DF4DD96537E475BF87667EEE6D1 /* LookinAutoLayoutConstraint.m */; }; + 2055774CD703B52DABFB1CC588394A94 /* MJExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FDF986FBD2BE8E5315ABD8F7AC77CCAA /* MJExtension-dummy.m */; }; + 20D618EF3EA5E3BE96DA24D36E3CA9EF /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E3E1CED1AC0225ABBA7CD840120690D /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 20E738E52B4712385489A62374C74C7F /* Lookin_PTUSBHub.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AD565A60EEE17150633A9FC960E5B9 /* Lookin_PTUSBHub.m */; }; + 22516EA77E7120000632C30BD9A03927 /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E6B028FFB02F2D9C678B416E0E0D15 /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 22527055DF0B42E57A6EA765C8E911E0 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 3596AC524204321ADEC9BB7FBBB1DAB0 /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 225C0CA5EF8B40E6125231DA85C9452E /* LOTValueCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = D45E540AA99BF8CD5089ED00B94033F7 /* LOTValueCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 231A40F14D020AE2F61AA5C3289E6CF9 /* UITextView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6A7B26A3B46094E17080056518298B /* UITextView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2328D9EAA575BF81478627B849D1FC53 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = C28EEAD1B0141A37B9B19F055931FA17 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 23C5654B62A2DBD4228C4B05413ECF5A /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 557816D4AECF88136ADDDAA4485A49A9 /* LOTLayerGroup.m */; }; + 23ECC9E5E082094B64651BD82568ECFC /* lottie-ios-Lottie in Resources */ = {isa = PBXBuildFile; fileRef = E8F840BD36B903B27E980AFC9F11A82E /* lottie-ios-Lottie */; }; + 241D8DFB272290432170855DB375F0DD /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = F956DD5E7DFC47C6819F4AB8E782091A /* LOTPathAnimator.m */; }; + 244A8622B3C8A91FAC0199C4A04974EB /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = A49601201B530664BB6A82AA1BB75C48 /* LOTCompositionContainer.m */; }; + 2460C08042AF8B7D0492A062F755986E /* NSString+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 2414A027047ABE3A2476AA9C35FE8895 /* NSString+Lookin.m */; }; + 24E8E4ED0B5D988E3346E6638619F4E4 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 608DA2806FEE128BDDA39D7217DAAB7E /* SDImageFrame.m */; }; + 24E963C1D6245F98BAC8A0ACCB7DE987 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = DE9C3EEAC553F6D9CDB67DE525CB2E8D /* NSBundle+MJRefresh.m */; }; 2567FE276DB76481DEFC7DDFE7D775CC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - 261C31F4038EC00D5961218C97905E21 /* LookinConnectionResponseAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF2F8A5A2E35CC31448E86BCF471F49 /* LookinConnectionResponseAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27212D06F5EDE3BB10264D93075B2275 /* LookinDashboardBlueprint.h in Headers */ = {isa = PBXBuildFile; fileRef = 713E37659AD7D79DA6664C3D3ECF01F7 /* LookinDashboardBlueprint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2759D8D4FCE58812ADECB348E369C6F0 /* LKS_MultiplatformAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C69A4489CC7299F114CDEAFBE0DE3C /* LKS_MultiplatformAdapter.m */; }; - 27CC45A4ABE5B40723D35310D05CD146 /* LKS_EventHandlerMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CB82C5681E372AE74735E8F3B7211E5 /* LKS_EventHandlerMaker.m */; }; - 288CD3416B265CAC1300D7938167AE66 /* MJPropertyKey.h in Headers */ = {isa = PBXBuildFile; fileRef = D197698AA79A94AD39EC006BBB9D3481 /* MJPropertyKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 288D796F3F7B9F42690E24A3B1018B2C /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C0CAD4F0394CDAF40054888E02EB093 /* SDImageIOAnimatedCoder.m */; }; - 28BA9702905AA2B4C1E9E4878032D4E4 /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = B9E85A8129A4E7BFE16B2262D78F1DCC /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29F7F0E98FD26A96364DBACD7D5F237A /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6609EE1C9372D5E3C70AF9861CE95D /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A24F241D7D74FF6DEA953F9DD49391C /* LKS_EventHandlerMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = DE6C055C722C44DA0E562F93906DCD34 /* LKS_EventHandlerMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CDC7B9EAD356E35FEAF526EEA6A8E91 /* LookinWeakContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = F9B85917A028A675DFE95B885791EDFC /* LookinWeakContainer.m */; }; - 2DC44A09A6C9D6DC7D1BDA2DFCF99EE3 /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BF32317317006604613DB6B7E6531 /* MJRefreshConfig.m */; }; - 2DDA5F044BC698BC5D48A7CFDDBF71E3 /* LookinAttributeModification.m in Sources */ = {isa = PBXBuildFile; fileRef = FD1216744C111B10EA2988454A525213 /* LookinAttributeModification.m */; }; - 2DDD48230ED9E8068C7E439D79B99A8E /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F715C3F41E2D739BCA20A8ED2E487A1 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2E86A7C77E43AEA4697979F1F848E68D /* LKS_RequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = E4000AF0B9EEE3F891ADD766B1967BD3 /* LKS_RequestHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EFF1EFA2FF0D2F1AE44A9DDBB932425 /* UIScrollView+EmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E369F88941EA9A46AF58BC88CC0720 /* UIScrollView+EmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F6D9BEA582A2DBB70A6C3B2FC2DB91E /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 15D08EB14955AB2B841A5E9E16D8D4AE /* SDWebImageDownloaderResponseModifier.m */; }; - 2FEE980BEE23B8E0C7EBB70445EC8C9A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = F320516E3A699EEF56C411E9C2DA9C29 /* PrivacyInfo.xcprivacy */; }; - 3187FF0C251D1B78BE87F64F6F6E944A /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 4819E2A59EFDCF27B3C3DDB40C7B2D13 /* SDWebImageTransition.m */; }; - 31DC2EC78AD1F8241AE6051EF9E73B0A /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 0370FDB753906B18C1B9AFB8BE7D213C /* SDWebImageDefine.m */; }; - 320DE42AF3CFE11FF785FEB1A7E6547B /* SDImageFramePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 131863AC3A27979CE5BF1B35EB9C1CED /* SDImageFramePool.m */; }; - 321F87DA34863DC5C977323BAEDB2B55 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 45F43707DFF3E5A8EFA1404F7259F5DF /* NSObject+MJCoding.m */; }; - 325CA20B9271F3E008234E1518B79061 /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2065E7BBA3909607E34531E7D59623FF /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 261C31F4038EC00D5961218C97905E21 /* LookinConnectionResponseAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = A3545CC97FFE23A0786FACE7932EE658 /* LookinConnectionResponseAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27212D06F5EDE3BB10264D93075B2275 /* LookinDashboardBlueprint.h in Headers */ = {isa = PBXBuildFile; fileRef = 419EAE78B6D36DA2749972D0E4AD9694 /* LookinDashboardBlueprint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2759D8D4FCE58812ADECB348E369C6F0 /* LKS_MultiplatformAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D490AA50814705BBD2B14154A7664B /* LKS_MultiplatformAdapter.m */; }; + 27CC45A4ABE5B40723D35310D05CD146 /* LKS_EventHandlerMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = EE3CB5083DC0F2D78BA99F4749F1B97A /* LKS_EventHandlerMaker.m */; }; + 288CD3416B265CAC1300D7938167AE66 /* MJPropertyKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 538F6F082D2A21D465D72E3F2C96CB37 /* MJPropertyKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 288D796F3F7B9F42690E24A3B1018B2C /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 6965B9073E9D634DD8C40E407013F155 /* SDImageIOAnimatedCoder.m */; }; + 28BA9702905AA2B4C1E9E4878032D4E4 /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 3530E3233AB5FDDD021147EAB477BC6B /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29C4AAC4486769CEAD3775998E69B563 /* LOTBlockCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E9C47111ED27E332992565A571B8E1E /* LOTBlockCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29F7F0E98FD26A96364DBACD7D5F237A /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = DCB828210183DADE92F1581FD9DD70FA /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29F8D3CDA61AC705A5BDB4079F6187F8 /* LOTValueDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A49F73C4891559F8823A2E496F8A7BE3 /* LOTValueDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A24F241D7D74FF6DEA953F9DD49391C /* LKS_EventHandlerMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD1BBA1F9E37385193AE9DD1A88F8EA /* LKS_EventHandlerMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A68213B3875591AE2BB405CAEE01E25 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1DF8BF780A4AD9606856AB857CA1D86 /* UIKit.framework */; }; + 2CDC7B9EAD356E35FEAF526EEA6A8E91 /* LookinWeakContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CE057CCEA5D2012438C45F87BB9D356 /* LookinWeakContainer.m */; }; + 2DC44A09A6C9D6DC7D1BDA2DFCF99EE3 /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 2221DB8D43C762DB571693B35D1BAFD0 /* MJRefreshConfig.m */; }; + 2DDA5F044BC698BC5D48A7CFDDBF71E3 /* LookinAttributeModification.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7B3E4A2E5BE7D5793929F0E0BF3FAF /* LookinAttributeModification.m */; }; + 2DDD48230ED9E8068C7E439D79B99A8E /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D5927150B93BA174C256C7736A8A055A /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2E86A7C77E43AEA4697979F1F848E68D /* LKS_RequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F849428C576E3A9468531842BDFB6AD /* LKS_RequestHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2EFF1EFA2FF0D2F1AE44A9DDBB932425 /* UIScrollView+EmptyDataSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 009D72B656589FB38748BC4F330C2688 /* UIScrollView+EmptyDataSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F6D9BEA582A2DBB70A6C3B2FC2DB91E /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = A9435816EE997135BCA2DBC2836F4457 /* SDWebImageDownloaderResponseModifier.m */; }; + 3187FF0C251D1B78BE87F64F6F6E944A /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E419E7B3068425BA42B12905F41B470 /* SDWebImageTransition.m */; }; + 31DC2EC78AD1F8241AE6051EF9E73B0A /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C2E63E5EB9C6856F3C527056CE8AD9F /* SDWebImageDefine.m */; }; + 320DE42AF3CFE11FF785FEB1A7E6547B /* SDImageFramePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B30379A5FC60D096DE28AF1F7FE80F /* SDImageFramePool.m */; }; + 321F87DA34863DC5C977323BAEDB2B55 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = A4CF6D4E28861162065F5E9E77AE1E79 /* NSObject+MJCoding.m */; }; + 325CA20B9271F3E008234E1518B79061 /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C9E93301A1EC84E6AC23F6D46D2D7DC /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 327BA3DDA513422E632D3DA4A8FC60EC /* MJRefresh-MJRefresh.Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */; }; - 32ACEDCEBE0507A82D6323114A1C74F1 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DFECBD4586BE9AE288AFFA5027A9A24 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32F2B91621A2F8F9AD7C8E2B224D73F6 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = F226E8137EFBE0F2C4ADF98335CAA02A /* SDWebImageDownloaderDecryptor.m */; }; - 32FF240AE9443A1D2CFE27F50B55F591 /* LKS_MultiplatformAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0075507DF323DF510CA1115DE2B33C98 /* LKS_MultiplatformAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 332F2099D726E75CEFAF1F734104A066 /* LookinWeakContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 785DDFE2F3C7BA8AEDE2278087F506EB /* LookinWeakContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3331A013D48A5063B483A51B7E9068ED /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A6A924083322C61BD2DC82A438F46687 /* AFURLSessionManager.m */; }; - 33D3587AF629B2FA21554DA002D6ACB8 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CC467742888B5DE59CC393D50BA540 /* SDImageCachesManager.m */; }; - 34B28D4F0168194B6EFAC0520EB7A7F4 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = CC47954DDA2CCCD6E92132955A0DE728 /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35D42759A562C482EA5DF574F75CF3B8 /* NSArray+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = FEE404F0AEA8371C4FCFE3F576AA5835 /* NSArray+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36F4B09E7C71DCC5CEC6057814033C37 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B6A3897B6D415F51E7F65FD9A20296 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32ACEDCEBE0507A82D6323114A1C74F1 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F0ACEA7C94BAFD5533A2014DF10EB89 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32F2B91621A2F8F9AD7C8E2B224D73F6 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 77B0F8398C723F548412D9D517A0EF96 /* SDWebImageDownloaderDecryptor.m */; }; + 32FF240AE9443A1D2CFE27F50B55F591 /* LKS_MultiplatformAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 27BBE0C549C27AFC3E95E715586E93F6 /* LKS_MultiplatformAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 332F2099D726E75CEFAF1F734104A066 /* LookinWeakContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2891F6EE4D0052CFD31079E28FEF51E8 /* LookinWeakContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3331A013D48A5063B483A51B7E9068ED /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F16DAF463965A67C3740345D636C7A /* AFURLSessionManager.m */; }; + 336ECD5741D57E20B7043F67472EAEA7 /* Pods-keyBoard-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 969A9A842778EFB5D62826500DFF4E11 /* Pods-keyBoard-dummy.m */; }; + 33D3587AF629B2FA21554DA002D6ACB8 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 94E1602E3436C82C60DD50E3CA701878 /* SDImageCachesManager.m */; }; + 34726090209B31C283ECDF1A6B7B30B8 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = CB16B2529A179FB02230F7E909787127 /* LOTKeyframe.m */; }; + 34B28D4F0168194B6EFAC0520EB7A7F4 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = F21872DF2B8F1D5F2A76579D75F10148 /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 352BC811AC0805A07CD021D8AB11CA19 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A92D0AF92DEC605DB954284FF6F144 /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 359971634D802DEC7AE71B5434346E2A /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = A321AA3CEF6D528E09B6BCCAB073B280 /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35D42759A562C482EA5DF574F75CF3B8 /* NSArray+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E56602E74E7A005B70C02489452CA0 /* NSArray+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3610588F6D25070B9DBF77DE4C43C672 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6257AF1656068251710E18110E56E409 /* LOTTransformInterpolator.m */; }; + 36F4B09E7C71DCC5CEC6057814033C37 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B66F3AA881E6E906B8158FA8490545 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3777CD89D444CBBB48AE323B303F3FC7 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CFBDDF0554D720E199E1094AAEC3D171 /* ImageIO.framework */; }; - 37B890ABDC7DD441E6AA662325D412E6 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = B36A499BB6A9A389E077337779129B95 /* MASConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3800EA1B83FDE869FB2E4B049F519962 /* UIViewController+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2567115C715DFD2B942FF9386C729778 /* UIViewController+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38938E604A7D708E6378A44063EF3512 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FA1B344071044AFFAABF1077219DEC22 /* UIImageView+WebCache.m */; }; - 392F62298E0D8C669229E132D791BBF5 /* UIImageView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = A6B89FBB0AA4A7BD7E16AFF20A519DC2 /* UIImageView+LookinServer.m */; }; - 3A1AD84C0DC3C256418CC46739024E96 /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 79462E533AFF776B12B799A128AA5EE8 /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3A2FCB914F6EADED828FF05F7E9132AE /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 61AA277CF1084D31AAA460D8C1A9BE4E /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B1C72DC480AB19BD55B6275750D62FE /* NSSet+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = FA2246CD5BC5C3E37CEC58BCA4848181 /* NSSet+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B8EDFF69A68ABD3735E0C6931CA5C95 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 35618C07738616EC64E35AB9084E01C6 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3BB69CB142D744367868F834912993CB /* UITextField+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC88A03608F444860F81FB5EB689938 /* UITextField+LookinServer.m */; }; - 3C7815EEC599DD7D42FDEF19B2FF1563 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = C0AED8CDD333F60946EF309E2D789249 /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C7EAECB8C573E714C818BA04EB33773 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C59B65D3E951B3FDACD866C4564C0214 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C8F2F868D0C361CAF43E53CDB8EB631 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 794882B4F91B9E9B55DD3DF40E04DA22 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D0BBFEC1921CE71BC240DC18D8BE540 /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DF57705B90AB01302C42302B6BB038DD /* SDImageTransformer.m */; }; - 3E3D09700A62280A9EB8D65B97335ED8 /* LKS_CustomDisplayItemsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = C08BFCAD6B6021A9C9686DA64A6CF1AE /* LKS_CustomDisplayItemsMaker.m */; }; - 3FF7252DD60182221BB1E5A167C41A07 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D3B8DD288273B0C3AFDD2F366BB894B /* UIProgressView+AFNetworking.m */; }; - 40AD5D0AB3ABF7F3A5A4A98BC5B84419 /* LookinAttributesSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 40B6DD67F49B0103232B5D6B727392FA /* LookinAttributesSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 416DA8B2997381F954DBA6E6A53DA4A2 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 17422A39378973466DCE06FB6ADA832E /* NSData+ImageContentType.m */; }; - 41A4AAE7E6024E7AAB83DD22FB42D34D /* UIColor+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D4236904A41DC2950754F5BE583BD4A /* UIColor+LookinServer.m */; }; - 425C9EA28FBEB7F7FC09A3F4A88C5955 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = CE89275D8F89A11FB2761E0461236313 /* SDWebImageError.m */; }; - 442F468E261A1106C291BF52BDBF9DB7 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = D5509360DE46CF0B8D64058FE9FD45E8 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 447BBB1BCA8E0F2D23634888BED6DA81 /* LookinDashboardBlueprint.m in Sources */ = {isa = PBXBuildFile; fileRef = 290A1387E4C301A25D8613FBB0DCEC6A /* LookinDashboardBlueprint.m */; }; - 44CD842019B1CEA681F820F37A30B7C4 /* SDImageFramePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 148FDB67C55B5854E979447E82AFD54E /* SDImageFramePool.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 452C940762F65B125C216F73B369F583 /* MJRefreshStateTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A2C339DB0F9EF94544BE6FCDA59F50F /* MJRefreshStateTrailer.m */; }; + 37B890ABDC7DD441E6AA662325D412E6 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D6239421DBA2AA663641F9AAB1985B8 /* MASConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3800EA1B83FDE869FB2E4B049F519962 /* UIViewController+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F7009EC2BB4D53FDC6C9901C3FFF1BC6 /* UIViewController+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38938E604A7D708E6378A44063EF3512 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DA85B6E011624F9A8C4BE9DF73C97D7F /* UIImageView+WebCache.m */; }; + 392F62298E0D8C669229E132D791BBF5 /* UIImageView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BA9AAA7CE7F25495C1E05CC418178B7 /* UIImageView+LookinServer.m */; }; + 3993B39A8B20743278F1E08DA9CC47D1 /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FF37EE3087F83CC98A26E173129B85 /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39E40C0B595AADBCE898BF30E529D40E /* LOTBlockCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = AC21C0F972D056C3C453A9A7A48BE015 /* LOTBlockCallback.m */; }; + 3A1AD84C0DC3C256418CC46739024E96 /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 5176C44179911BE6096B6F78D7B0547C /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 3A2FCB914F6EADED828FF05F7E9132AE /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DD3B2EA73461CAB987E5245908721D /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A49D2E06AA81A84476590E2B9C69080 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 98A6230674D154A31BA6EE34F4B218A4 /* LOTColorInterpolator.m */; }; + 3B1C72DC480AB19BD55B6275750D62FE /* NSSet+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A4713E0867604971607974AF9B43EE /* NSSet+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B1D9216332BB1F1C577B4EC499859AB /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = B16B9D03F4DDA52CF705C62F92479EA8 /* LOTComposition.m */; }; + 3B8EDFF69A68ABD3735E0C6931CA5C95 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DD324EBDEE81D99B659A56FDE0AD4F51 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BB69CB142D744367868F834912993CB /* UITextField+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 38BC517337ABB5BD491E24FFD29499B6 /* UITextField+LookinServer.m */; }; + 3C2B4B72531D6B0AE0D2BEB7F93A515D /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D51A288C831A6D54E41E17D68FDC10B /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C7815EEC599DD7D42FDEF19B2FF1563 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD49AE2AA7E5710A393A5684AA18C1E /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C7EAECB8C573E714C818BA04EB33773 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DE018365296CA45CD04B4F12ACF79B6 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C8F2F868D0C361CAF43E53CDB8EB631 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = B4A6075AFD2A762034894457C45650EC /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3CC90ADD40D7338A8E033B42173D1F8B /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 536D601C9C957D8965AC17CEF27A937B /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D0BBFEC1921CE71BC240DC18D8BE540 /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 267474AEE2CD1927089157AE230FB8DC /* SDImageTransformer.m */; }; + 3D0F7B02FB0D33BBCF8F8E825D16B8C6 /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E70A06DB6CF6E8C78B17F928A289B0C /* LOTShapePath.m */; }; + 3E3D09700A62280A9EB8D65B97335ED8 /* LKS_CustomDisplayItemsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 26A29B86831E8809CE008EFE8008936E /* LKS_CustomDisplayItemsMaker.m */; }; + 3E9B436EDC499153F0E1C8895C53F6BE /* lottie-ios-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FF9559E18864B7A1C6A0D330DBE11FF9 /* lottie-ios-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3FF7252DD60182221BB1E5A167C41A07 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 97CFADF49D680679D6078BFE8FB65081 /* UIProgressView+AFNetworking.m */; }; + 40AD5D0AB3ABF7F3A5A4A98BC5B84419 /* LookinAttributesSection.h in Headers */ = {isa = PBXBuildFile; fileRef = D744D9289D5F0C6D119E52560AA434E9 /* LookinAttributesSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 411DF0E2453D8FD9A6DE744FF53BAA0F /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 454998BDBA877E6A94CA2DFFA4D13CCE /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 416DA8B2997381F954DBA6E6A53DA4A2 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = A7E87F8A087863F9CC23EE3AD4EE05B5 /* NSData+ImageContentType.m */; }; + 41A4AAE7E6024E7AAB83DD22FB42D34D /* UIColor+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B8775C78A1A931C6C991432AD53A379 /* UIColor+LookinServer.m */; }; + 425C9EA28FBEB7F7FC09A3F4A88C5955 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A75BA7C6FAC4078A7777D59F6B787E /* SDWebImageError.m */; }; + 442F468E261A1106C291BF52BDBF9DB7 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DA693F8681513C57B084ED6AFD87D21 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 447BBB1BCA8E0F2D23634888BED6DA81 /* LookinDashboardBlueprint.m in Sources */ = {isa = PBXBuildFile; fileRef = EA6014C78AC2633EC05987768E12AB6F /* LookinDashboardBlueprint.m */; }; + 44CD842019B1CEA681F820F37A30B7C4 /* SDImageFramePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E4E913EE1CEBB738C3DC03360C898B5 /* SDImageFramePool.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 452C940762F65B125C216F73B369F583 /* MJRefreshStateTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = D0381D5C27B21FC766E7E90B56D44358 /* MJRefreshStateTrailer.m */; }; 4571A0EA37DC84F39E3830D38A1531AB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1DF8BF780A4AD9606856AB857CA1D86 /* UIKit.framework */; }; - 45E1583D7EF53489B82C4CA2AD1AD0CF /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD0D2A5CBDCDA5BDF9600C731F95B24 /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 464A0100327C8531D86BDC31737CCF75 /* LookinAppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5E3242D0D245F39B1349B5C4819144 /* LookinAppInfo.m */; }; - 4688743B7B845309486559EB7BD5D147 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = CBCBBB0099A9339A1A8ABBEDF291AF92 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 475B4F3E71C293065AAFDB1888696CF6 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC603030F93055E51FF99944B356CB6 /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48916DE9521F627589300512ECC2D4A5 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 613A0EC29C46AFB409483355C45FE1C7 /* NSButton+WebCache.m */; }; - 4A15ABB502D625EBE3E63100664AB822 /* LookinCodingValueType.h in Headers */ = {isa = PBXBuildFile; fileRef = A7178BC144BA120067B45EC042E2D156 /* LookinCodingValueType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45E1583D7EF53489B82C4CA2AD1AD0CF /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B664145800977547E0543C1869DEFCB /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45F85605A99A15CB2A1CA551651FB85D /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FF4A465A71C22D855FFE8635EE239FE /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 464A0100327C8531D86BDC31737CCF75 /* LookinAppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E710F4FB16EBBAC69C02C56E882DD89 /* LookinAppInfo.m */; }; + 4688743B7B845309486559EB7BD5D147 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 754F007B1AD2FA757DC521D446B39178 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 46D0082EC03F5D8A1DFADCBE11232F5B /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 30569FA1EC7CBB3F016F8B51EBE46731 /* LOTAnimationTransitionController.m */; }; + 46D642FEC0C2E9ED4B54CEE2934BD27C /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4610C449B2D89871C4723DF50B15525C /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 475B4F3E71C293065AAFDB1888696CF6 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = CCFF2E54489411070A1C337E3ADAB5FE /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 478C9C8BE6B013E3BD04DF0281F090A6 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB5AD9626F0C9D627040863D614F047 /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47E2AD08EFCA06507DE140CC000DB7E9 /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = EB2D7C5B5FF1CED8FDA048FA769CD66D /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48916DE9521F627589300512ECC2D4A5 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F29105585CA9EA4044256AB1FD6F1C26 /* NSButton+WebCache.m */; }; + 490E037377AA921F9CA1934E3217944E /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 91D82FDDD77B5B33B81C33FB2099851C /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A15ABB502D625EBE3E63100664AB822 /* LookinCodingValueType.h in Headers */ = {isa = PBXBuildFile; fileRef = B3FFF32CB0A8261DA8DD1B50BC6DCE9F /* LookinCodingValueType.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4A2D7878579537881DD3859B3359F702 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86A260983254EF2D214865E91D3787B2 /* CoreGraphics.framework */; }; - 4B2C2AE16AE3DDA7417AFCF7952588F1 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E0CFDE214ACE5F071E4BEEF63BDDCD6 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4D2C79AB2D24CFEC864F08D913CE7692 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 97041A2525062E71B923CEBB11179389 /* SDImageCodersManager.m */; }; - 4DA2C6099343CD55160ECB3EBDDFE1DF /* NSObject+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F2C6DE995A9BCF5E418479898442088 /* NSObject+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DCA75BFE1558CE59DFC56607E49B3D2 /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = B985D3DA018E1C8C3AC44ADE702B404B /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E964FFE29CFF8613C0029C913F39A05 /* LKS_InbuiltAttrModificationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = E91E93486D40A052515660F00B079B5A /* LKS_InbuiltAttrModificationHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EC8DBADA7BB954276351A639EB4398D /* UIBlurEffect+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 220B8AB16FBD2158AB55D35E9376D13A /* UIBlurEffect+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4ED05DB3E43FF6AE1FA22130B2B50F05 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 80FED7368916E2D1EE8E2B7F26A2618F /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50096BAC0F3270FB111E76D32714E579 /* Image+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 19CD19C5B1822DA77E4C7C9F454FD5D5 /* Image+Lookin.m */; }; - 506FC58999564A737C745F2590E9B4D5 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A3DF7C8B0CA95D284475EF487EC6944 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5111A0A0934551CD2B9DDB1A1CA79FA7 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A299BC446CAAFD89DBF55F51B07F0F4 /* SDAnimatedImageRep.m */; }; - 512B9661FC34235E0EEB3A6D3E319B88 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = D15A23E7684648249EA4D7C312BACC22 /* MJPropertyType.m */; }; - 5163FC6D715F6881B1FA1AB13DCEF870 /* UICollectionViewLayout+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = EE4B0CFE38831013E2F465F169783700 /* UICollectionViewLayout+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5174DD2019966DFDC21B8864453ED3DE /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 049541DC9203D75878CAF900D458CC34 /* NSObject+MJClass.m */; }; - 523235228A1C021C67F2E3776A922DC5 /* MJRefreshTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = E603FC069FE0FF9249D8A7348F6E7795 /* MJRefreshTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 526485EF6D2B62B24DB59122FB94BD42 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D2D491E6C287C5C66C4EF6B165E85BD /* SDDeviceHelper.m */; }; - 5308E660E723C11E7691D311FD59C459 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = F14968FDB67455000B5A2C9A77C64B07 /* SDDisplayLink.m */; }; - 53433003112C4FE271EC985803862B61 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = DF2FF7F81EC1FE20B9F8B3879085D4FA /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53C1722650FCAB2637867D0DC31FC3CB /* Lookin_PTUSBHub.h in Headers */ = {isa = PBXBuildFile; fileRef = 4211A99A6EE6255E875FA46E987F2128 /* Lookin_PTUSBHub.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5490C03887ACF6C4EAC25ADFBB509CE5 /* NSSet+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E5219BC7E7BF5C405E48CC237D2EDC2 /* NSSet+Lookin.m */; }; - 54E268C32915CF908E7AA776909B45EB /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 9324A882B3ED55B3EF9D92D946555583 /* MJRefreshConst.m */; }; - 55F7C7F055A18044497F8C88CAE34118 /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B6FEE442B47E03714BC3FB94670DCC /* SDImageCachesManagerOperation.m */; }; - 561420A20DC0A84258A902E9EB69A15A /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = A417B5FC83ECB57A121FCD14A6DD23D3 /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 564714D075CF51356D3D8437846AA6EB /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C457050D64C2C7287BDFC768D33C9AE /* AFURLRequestSerialization.m */; }; - 56D8A7EAE4D72FF6C23421CAB6F21504 /* MJPropertyType.h in Headers */ = {isa = PBXBuildFile; fileRef = 04549DFA210F3D3C27211535994000B3 /* MJPropertyType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56E800EB3B2BE8AE0BA45A30974D7920 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E321D3F90B0E3A7E45F64EB551639098 /* Masonry-dummy.m */; }; - 56F1B543BC54204336CB5E50B60F719F /* Color+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FD8426A1028406F5A9C4E27D5C9E76C /* Color+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5735091665AC18FAD028EB68786A85AE /* LKS_CustomAttrGroupsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D58792A3DBAB3667630D1FF53DDFB8D /* LKS_CustomAttrGroupsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58F7CE37BB4CB3BE806B68A502E6E1A7 /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = EF15AFFA76ECFCE490107F1DEB31BD62 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 596180E0EC9F46D12BA840DC4AA62659 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = F66C529D67E3A61B55DFF40E581048ED /* UIImage+MemoryCacheCost.m */; }; - 597E390C0BBB75B8045B651C487C2034 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AF433E9D2C6355E77FFBE3AC3CB5B3A /* SDImageAWebPCoder.m */; }; - 5A6D3BE92C77ED70C397567996DFAEB9 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CABC6887E9E2AF4A62642A0C780B4B3 /* AFHTTPSessionManager.m */; }; - 5A8BC91257FF6B36237BF09A7A6EADF6 /* LookinObject.m in Sources */ = {isa = PBXBuildFile; fileRef = A3048EE57AEE9C3B5FDB98C9E7DF4BB9 /* LookinObject.m */; }; - 5AF22814CD055B553AD9D78BE54B94E1 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 219886C4AF0E20C3CD4D4061CAAE8767 /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B08596E856E4CC2F34A8A2372F9F764 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A054792401E8F9F7BEA8441F9C1DA7C7 /* NSArray+MASAdditions.m */; }; - 5BB6B99986FD7111B3AEBE931C7F507B /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 80F9F8B5249F11798A805DF46C09F2CA /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BD5D9B8F61C124A62C75D9AC36A07BD /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = ABCA85AD5553CAA4C58A12223211E18E /* MJRefreshTrailer.m */; }; - 5C8279C226EB028B044C5A0F4AC5A91A /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = B9EF838DEDDB795D85E2F065BD697452 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5D0DEC179A7B4143769C663082E2662A /* LKS_ExportManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DECAD058B2FE8CD24CC1022B0A1523AB /* LKS_ExportManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DCBA14510E091D6A1CE499B08B794B5 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = E614E7E1FA6658E0B9CF44C05D4E6811 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DFCBADAC7D0FAC82C84A6C8E7BF1DA6 /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = E0E79E8251323154CB271295CCD93D0A /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E10328A83E05D0015D7459FAAEF121D /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E7FA66C9DDB6507631DF1F179557C4A /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F45735DF355530CC955066D3C007E19 /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD6A0DEDE4E0A17B8A614C8D15158DD /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F5426608460A8B17C1AE5C2351BAA19 /* UIScrollView+EmptyDataSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C3AD08A39781246EBAC23F5B8A9BDD3 /* UIScrollView+EmptyDataSet.m */; }; - 5FDC4239F7B651092BF582D0F460BAD4 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 45DC3F40C3A1FA5B5920DED3DF89557C /* UIView+MJExtension.m */; }; - 6002CB94684D7C786700D2A294146AEC /* Color+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 9278559A57D46FAC97B2480A76E574BE /* Color+Lookin.m */; }; - 61461B0D9D7B81C3F8D24066D9A19DCE /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = E7FE66EE9C43A4BD03E9F354FADF7098 /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61507E402F1F7C58BF119995A0479A22 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E1C46B6B074DF2D170E6F2ACB5E8C8BA /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 616A8338C42FB01748DF1BDDA944858D /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FAA44D6FF1A44EB319965DB5E0CC5F73 /* UIView+WebCache.m */; }; - 61857C821395B868C65A8FFE4DA1B4E3 /* MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = B486D1944AF55BFAF5E8F8CDE6F8EB79 /* MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61EAFBCDC83B2C603918B3C9D9A73A18 /* LookinConnectionAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 5212AF1887982114A494FF962BEF5A35 /* LookinConnectionAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62FE895DF9D65A2955A275D909ECBE18 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B21CBEE99C5014F0E0F66C420497FCD /* SDAnimatedImageView.m */; }; - 6525ECE1CAFC1259F9E6E5FDDE6CF218 /* UIVisualEffectView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 594925FC6BBDEA3002D153F167630F93 /* UIVisualEffectView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B2C2AE16AE3DDA7417AFCF7952588F1 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 76387329CA57243454030B76DC6A5E11 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4D2C79AB2D24CFEC864F08D913CE7692 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 370FAC9D62B95469A30702A3BD34569B /* SDImageCodersManager.m */; }; + 4DA2C6099343CD55160ECB3EBDDFE1DF /* NSObject+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 9970CF11ACB6664D0F8F7D8740612EB5 /* NSObject+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DCA75BFE1558CE59DFC56607E49B3D2 /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 3986483EB018703D62F349C2BA876EEA /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E43713B6AD30573D3469DFB7B66AF8D /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E3E2981EBC22397BB76AF331765E194 /* CALayer+Compat.m */; }; + 4E964FFE29CFF8613C0029C913F39A05 /* LKS_InbuiltAttrModificationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EF0E2F830509F4888F8585751321D7D /* LKS_InbuiltAttrModificationHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EC8DBADA7BB954276351A639EB4398D /* UIBlurEffect+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BE83F56CECDA4D6CD10D59AAE56456F /* UIBlurEffect+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4ED05DB3E43FF6AE1FA22130B2B50F05 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 060141C08B0B82907CD5F340847F21AC /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50096BAC0F3270FB111E76D32714E579 /* Image+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 97EFFE2479D724D2D21DC6D71D9380DE /* Image+Lookin.m */; }; + 50608EFD4C9DF296E9D44CDA38DDD601 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9FBA40CC299718A9107CD58AD8DF1E96 /* PrivacyInfo.xcprivacy */; }; + 506FC58999564A737C745F2590E9B4D5 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 731C3668315C990ADF87F98E74761A26 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5111A0A0934551CD2B9DDB1A1CA79FA7 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = EB94BACABEE654AC5908CF98BA271A4D /* SDAnimatedImageRep.m */; }; + 512B9661FC34235E0EEB3A6D3E319B88 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = C8AF30BA5FCAEFB31CFE6C47D25A915A /* MJPropertyType.m */; }; + 5163FC6D715F6881B1FA1AB13DCEF870 /* UICollectionViewLayout+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = FCCE9835E4170A085879F19F6504C6BF /* UICollectionViewLayout+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5174DD2019966DFDC21B8864453ED3DE /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 42A0EB37C7894465F7B5A5D138B1CF5F /* NSObject+MJClass.m */; }; + 51CC7C6197A0823DE8E02DDD2E55A3B6 /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D860BD18E73B0FFA81C68C7BFC337D /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 523235228A1C021C67F2E3776A922DC5 /* MJRefreshTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 99B65B64136C9389CC416F8FDAE36094 /* MJRefreshTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 526485EF6D2B62B24DB59122FB94BD42 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = EF03E12D45E449C98A8C9255C4D5997B /* SDDeviceHelper.m */; }; + 5308E660E723C11E7691D311FD59C459 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B2D7311C548FE2D75C0EEBC211995A2 /* SDDisplayLink.m */; }; + 53433003112C4FE271EC985803862B61 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2566991209B800FD7FAF17517B045915 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 536AD94A96C3B81AD07404CF4D23D493 /* lottie-ios-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A35608B3374972E80E83CD67BB160D9 /* lottie-ios-dummy.m */; }; + 53C1722650FCAB2637867D0DC31FC3CB /* Lookin_PTUSBHub.h in Headers */ = {isa = PBXBuildFile; fileRef = C3FA388D423F78D0AE1E89CDFB8EE15D /* Lookin_PTUSBHub.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53F2005EEE15D5075DD26210B938F80B /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B47DC622EE4FB6E6AC0FCBFF5CF804F /* LOTShapeGradientFill.m */; }; + 547574C59B156DB34FA21D42A7FCE15A /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = E08B7E8CFE4255500AF5EA1138BE117F /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5490C03887ACF6C4EAC25ADFBB509CE5 /* NSSet+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BBC4CE0E6DF98929EACF05DD146C876 /* NSSet+Lookin.m */; }; + 54978C75551DC86C204030ED9917526E /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B75773FCC1158B46A3C3001E7FDFA8C /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 54E268C32915CF908E7AA776909B45EB /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = C643BD492B4B2B42AEE19A95BBBBABDE /* MJRefreshConst.m */; }; + 55F5FEE701A0250639C42FE91A3A6ADB /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = D4BF743D5AAC5150CFA4C3D65F74747B /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55F7C7F055A18044497F8C88CAE34118 /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 91D7986EDBB5C05885421710B2929271 /* SDImageCachesManagerOperation.m */; }; + 561420A20DC0A84258A902E9EB69A15A /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = FBFBB6274776EF5C0B86FD389D2A9B4A /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 564714D075CF51356D3D8437846AA6EB /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DD74F97D4DA32C882FEDE95C5EBB8EE /* AFURLRequestSerialization.m */; }; + 56CD8F09CD6CD8D9BB07B643E5E9636A /* LOTInterpolatorCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = DC809D5F5A3488A8C92D46C51D8EB140 /* LOTInterpolatorCallback.m */; }; + 56D8A7EAE4D72FF6C23421CAB6F21504 /* MJPropertyType.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E24BD1B5A894294D523FC3499D056D /* MJPropertyType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56E800EB3B2BE8AE0BA45A30974D7920 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A9947185CE475FEBC98A47A30A4C30 /* Masonry-dummy.m */; }; + 56F1B543BC54204336CB5E50B60F719F /* Color+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 39EAB7B8BB80BFCF4A6C703116F64865 /* Color+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5735091665AC18FAD028EB68786A85AE /* LKS_CustomAttrGroupsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B6051B5DBEC45E815939A97BF7BBFC /* LKS_CustomAttrGroupsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5799E5BCEA50086A53F5DB5D7130B431 /* UIBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 113192C829148EF6BB5232DC8A352284 /* UIBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58F7CE37BB4CB3BE806B68A502E6E1A7 /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = AB336082852242AC0523027278573D0D /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 596180E0EC9F46D12BA840DC4AA62659 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 025F6CD14F8A03C0247CD91101DA4E5E /* UIImage+MemoryCacheCost.m */; }; + 597E390C0BBB75B8045B651C487C2034 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DA474FD59042ED22158D4CBE9129A6C0 /* SDImageAWebPCoder.m */; }; + 59897E1C013473AA9897D22E1DC1B0DE /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C528A38E039D43F23B098B826864F3D /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A203479B1425E12AFCF21136CF72899 /* LOTAnimatedSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = B16B01578F005D590657283A2CE7A9F7 /* LOTAnimatedSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5A6D3BE92C77ED70C397567996DFAEB9 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E9344FADE40145A3D66E9A7809A63E7 /* AFHTTPSessionManager.m */; }; + 5A8BC91257FF6B36237BF09A7A6EADF6 /* LookinObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E3B71AEC196329C31EDD4D4AB34276A /* LookinObject.m */; }; + 5AF22814CD055B553AD9D78BE54B94E1 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 23E1A13685067AF13A97BF22C69FA0CC /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B08596E856E4CC2F34A8A2372F9F764 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B2A7502555BE164EB76A9C6BC6C20F6D /* NSArray+MASAdditions.m */; }; + 5BB6B99986FD7111B3AEBE931C7F507B /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD0D47073F630039201E8CED9FA5AF9 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BD5D9B8F61C124A62C75D9AC36A07BD /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = B84EE19439FF7648170386C4262C0475 /* MJRefreshTrailer.m */; }; + 5C8279C226EB028B044C5A0F4AC5A91A /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD5DBABF9106A06C5D41FA98F76F3B3 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 5D0DEC179A7B4143769C663082E2662A /* LKS_ExportManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5356A35BFB138443252CA3588496940B /* LKS_ExportManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DCBA14510E091D6A1CE499B08B794B5 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = E40BE337022C0E201CFD11909AC04A07 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DFCBADAC7D0FAC82C84A6C8E7BF1DA6 /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = F119DF30C111115619E86829F8ECE934 /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E10328A83E05D0015D7459FAAEF121D /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9259F078559C2E842E3E823D5BBEA152 /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E784FF93B1E17745481F83F703FFDA1 /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = F6B2C6B91D32AD5A685ABC034ECE1811 /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F45735DF355530CC955066D3C007E19 /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = D353E96B6BCDB17BC747EFF7E777C4F0 /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F5426608460A8B17C1AE5C2351BAA19 /* UIScrollView+EmptyDataSet.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F16C0387436C0A7B5DC291FC5EC84C /* UIScrollView+EmptyDataSet.m */; }; + 5F57FF4BFC63C283B433EDAC4BA09B48 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F43874C95D4DEC4EE3D9C90BD47FF28 /* LOTStrokeRenderer.m */; }; + 5F72720C9304C41EF36C47E72E0110D4 /* LOTKeypath.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FF6AF03494CB12E91A424BC6E068CFC /* LOTKeypath.m */; }; + 5FDC4239F7B651092BF582D0F460BAD4 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 1913D7B9AD326C90DCD4BB68A80B3046 /* UIView+MJExtension.m */; }; + 6002CB94684D7C786700D2A294146AEC /* Color+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = D29E1C72AC9EE36ECCE1AEECB0C775B6 /* Color+Lookin.m */; }; + 61461B0D9D7B81C3F8D24066D9A19DCE /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A5743BAAC497A4F53A9E84F3A16F11B /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61507E402F1F7C58BF119995A0479A22 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 386F002BCF5A7ED180013733139D51E9 /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 616A8338C42FB01748DF1BDDA944858D /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D7C529B9A0FFFF11D0D42E675E2EC9D3 /* UIView+WebCache.m */; }; + 61857C821395B868C65A8FFE4DA1B4E3 /* MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 671323D7DE700F2D9BECEEEEFC4A4928 /* MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61A0411839D57A41DF72C0522CBE0EDE /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = 02A3FB9606ECFAFB7E0ADD60341CCF48 /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61EAFBCDC83B2C603918B3C9D9A73A18 /* LookinConnectionAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 85F4651A60673FCA78C760D531C07AA2 /* LookinConnectionAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 620CD28CECEF7D0DAFD0B70170E030D5 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A761A140C4A617FDABF4AAF51D35D2 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62FE895DF9D65A2955A275D909ECBE18 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9A8C2D0C0F5CE7BAE1294C2CBCD0398 /* SDAnimatedImageView.m */; }; + 6525ECE1CAFC1259F9E6E5FDDE6CF218 /* UIVisualEffectView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = C43C43AE90DC8E686CCA6240A7D78B35 /* UIVisualEffectView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 659D38386A3E09422812283BF27D71D1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - 67178A8153B1A2F1D0D544B8093E23C5 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 48A9A2DE85C1D87BCD354418BAF78749 /* SDAnimatedImageView+WebCache.m */; }; - 676775CB29378BB6CA3CA5992E9C6A99 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9662C23EC2FEA41BE91046E19A928D8C /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 67FCC0F9B42B1C20A66E99A3D56BED18 /* LookinStaticAsyncUpdateTask.h in Headers */ = {isa = PBXBuildFile; fileRef = D23D41020809113858D4CA46059797CF /* LookinStaticAsyncUpdateTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 683D708C157C95ADB467BDD2230BD4E3 /* UITextField+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = AB70C7432DDB8346C9DB4A27C7C7AEEB /* UITextField+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 68C3E98F8B9D6035962F29AE025DA891 /* UIImage+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = F2087695EC0958A50E2C65A5D2E03159 /* UIImage+LookinServer.m */; }; - 69345CBCB31076EBF8A2C5885AF973AB /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 383AEE356898B114D8DD079C51566FF2 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 694B8697854A776E32032999B2EF1FEA /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FD3FF7FA5E997D3DDAB5C272F8734A6 /* UIImage+Metadata.m */; }; - 6960FF2C4D61A09722930B33B1C7135D /* LKS_ObjectRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 30361FA11468C74A598363E37D30E56C /* LKS_ObjectRegistry.m */; }; - 69A06A02F52EB26259FAD1DF6B121BE1 /* SDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D448A155C957ECCF95DC54FBE28569 /* SDCallbackQueue.m */; }; - 69AB6A513D5F36D7360FEF4FDA1D60D0 /* UIView+WebCacheState.h in Headers */ = {isa = PBXBuildFile; fileRef = 832592FA01CF620F64F9CED4966CEA99 /* UIView+WebCacheState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69E353C99C6EEA3C93CCF2E526460B9D /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = AEB9B57AEEA7BDF0C696120F4B110F33 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69F6E66A089C40FB1063DE15499BCFDE /* LKS_Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 371FD070C447028E0DC76F07BB442FC4 /* LKS_Helper.m */; }; - 6A19379E3B0370EDA447743C9B1A1379 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3996B697C00897DAFE1DFD73DAA4E114 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B0978C9398336656EE309E62060AEAB /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CA256AA8704AE9F135214714BAFF153 /* SDImageAssetManager.m */; }; - 6B5C3592B5E911E833D067D0BC785B1A /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC42F03931384EE2605E5C1FF575608 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6BC2A615678C8BAE9F34ABA68BFDEF78 /* LKS_AttrModificationPatchHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 79EEB00E9ED2C742987150EA5E0B1341 /* LKS_AttrModificationPatchHandler.m */; }; - 6C57809DCEA4B6C0CA79918A69FD75DE /* LKS_ConnectionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ABD1279233951A8EAE905C43AD033A4 /* LKS_ConnectionManager.m */; }; - 6C85CA8D99E50C137D056B6057DAC58A /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9228BFB339DE3C8FD5163C974AB7DE89 /* UIRefreshControl+AFNetworking.m */; }; - 6CA0B4A9E7B2957063163BC673F355CD /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C0293D25B82D4CCF17D52B025BDDA03 /* AFAutoPurgingImageCache.m */; }; - 6CE8701D161A4BC0860FAF3951762A34 /* LookinHierarchyFile.m in Sources */ = {isa = PBXBuildFile; fileRef = EFD8B43671F8A160934DA73D3C45B4C0 /* LookinHierarchyFile.m */; }; - 6DE6C7F0FA965828E4FCE687BF75FBBE /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 79E1EEF42DE5E1954630A63B8A5E02B6 /* MJRefreshAutoNormalFooter.m */; }; - 6E66305665DBCFBCF5B2480BF705D500 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BF9DE6E63B2A31CC1EADA84D3E42E7A /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6EFC0630CB2761A2B1FC47176CCD62D1 /* LookinCustomDisplayItemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D4D2347D4EFB2E5610773AF965AA8399 /* LookinCustomDisplayItemInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6EFEEE3AE22E97DCEC4F5A3B88F56FC7 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2254BB0E1CAB331C712E8819CE1CEBA9 /* SDImageLoader.m */; }; - 6F3637EE643EABB1DE9212EA68649A64 /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = F299DB132C67105BBC5A78FBCB87FCF2 /* UIColor+SDHexString.m */; }; - 7074EA7FCC90B4967A437F5C43496828 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 25AADAD73C32FC4E150A4A19780980C4 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 711D32EF4A9901567A488291603BF906 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5248A2EBBCEB19A0BBFA557B594E2DEA /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71538A1D21015F459964BA625D5EE90A /* NSObject+MJClass.h in Headers */ = {isa = PBXBuildFile; fileRef = 96163189CC5AFA5E4E23D6B0B3EADFF7 /* NSObject+MJClass.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 717F76926C7BCB5B10C3037AD9239084 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E6BDC6A27A05429814F2520B890A63 /* SDImageIOCoder.m */; }; - 71BEB1D9532900291A5A24B1C038516F /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A9452B8FC36F44EC5608AB04827703 /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 71F2B8CBB99087F348C472230200586F /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9843F03B02D2521214C5C5583A9BBDA3 /* SDGraphicsImageRenderer.m */; }; + 668EEB6E53045B45143738095124C209 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 406B19CDA73B6B348EB34EDE3206DE05 /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 669F24C6936E68DA3341C2C9324DB127 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 682F255D431FE7D62FBF3F62694B4D15 /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67178A8153B1A2F1D0D544B8093E23C5 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 812ED7B28F0E145819B778744305C5E8 /* SDAnimatedImageView+WebCache.m */; }; + 676775CB29378BB6CA3CA5992E9C6A99 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = AE72483304FE178039C2CFD962CFE335 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 67FCC0F9B42B1C20A66E99A3D56BED18 /* LookinStaticAsyncUpdateTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 418208706EF0ED4137ADA295565205D7 /* LookinStaticAsyncUpdateTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 683D708C157C95ADB467BDD2230BD4E3 /* UITextField+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F35BA59352BD66E5A38B65AB458C6CB8 /* UITextField+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68C3E98F8B9D6035962F29AE025DA891 /* UIImage+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C36862986DFC4F0116A02192F11CBD6 /* UIImage+LookinServer.m */; }; + 69345CBCB31076EBF8A2C5885AF973AB /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = B198E2A178CD637F898A9FC759F5AF36 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694B8697854A776E32032999B2EF1FEA /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = D665B0960288F1AB2CAA57C49565BB0F /* UIImage+Metadata.m */; }; + 6960FF2C4D61A09722930B33B1C7135D /* LKS_ObjectRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 466DAE285C3334F3AE413BE41D981841 /* LKS_ObjectRegistry.m */; }; + 69A06A02F52EB26259FAD1DF6B121BE1 /* SDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = B79B0CB2219FA6E52F934720669267A1 /* SDCallbackQueue.m */; }; + 69AB6A513D5F36D7360FEF4FDA1D60D0 /* UIView+WebCacheState.h in Headers */ = {isa = PBXBuildFile; fileRef = 155B2767368B4C888D812077B0A69821 /* UIView+WebCacheState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69E353C99C6EEA3C93CCF2E526460B9D /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = F062F7E1CAD4A4E0E2AC47684DBA03D6 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69F6E66A089C40FB1063DE15499BCFDE /* LKS_Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C34E17880742101DF109A53F45DAE1A /* LKS_Helper.m */; }; + 6A19379E3B0370EDA447743C9B1A1379 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F211C2870F2278DC285989F15F8DE349 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A2973BCC0C5732CAABF4F9B83B1B1BC /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 63462E5F7111A6A05C8005EE2DB1D22E /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6B0978C9398336656EE309E62060AEAB /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A9EB92B2CD0DD2858B79BE7561D485D6 /* SDImageAssetManager.m */; }; + 6B5C3592B5E911E833D067D0BC785B1A /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 6759DC459162569720553EB7EB03D4DA /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6BC2A615678C8BAE9F34ABA68BFDEF78 /* LKS_AttrModificationPatchHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EC2CE7230178B73AB10D425029B9E7F /* LKS_AttrModificationPatchHandler.m */; }; + 6C57809DCEA4B6C0CA79918A69FD75DE /* LKS_ConnectionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14ADFCF379EBFC22FDF2F560A71B401F /* LKS_ConnectionManager.m */; }; + 6C696FA9BB84FDEC703BB4DFB66D43FF /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6C33DE2D8455E40EB1D6F82338CDDBF /* LOTAnimationCache.m */; }; + 6C85CA8D99E50C137D056B6057DAC58A /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8AED60E26E34AE37988903944A3AD /* UIRefreshControl+AFNetworking.m */; }; + 6CA0B4A9E7B2957063163BC673F355CD /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9394975673021D370D4F707E619AF2BF /* AFAutoPurgingImageCache.m */; }; + 6CE8701D161A4BC0860FAF3951762A34 /* LookinHierarchyFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E59076D2765A007CBC9044D38AFBB2E /* LookinHierarchyFile.m */; }; + 6DB1E6005FBB01631F50D31160ABE817 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = E7B56BED0A5A58B91DF8C927F2A5A03E /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6DE6C7F0FA965828E4FCE687BF75FBBE /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 28B17DCC89FCDA5BCF7A5FC8C5090B1D /* MJRefreshAutoNormalFooter.m */; }; + 6E66305665DBCFBCF5B2480BF705D500 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = F7D2581DA723898A6BA1E2D2DC68A987 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EFC0630CB2761A2B1FC47176CCD62D1 /* LookinCustomDisplayItemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 426E847E30B13D9F12156B9BDFD81EB4 /* LookinCustomDisplayItemInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EFEEE3AE22E97DCEC4F5A3B88F56FC7 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 28191A1942A1820843B4FC59A92128B6 /* SDImageLoader.m */; }; + 6F3637EE643EABB1DE9212EA68649A64 /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = DA27CEE6903745647DDFE563DA5CFAFD /* UIColor+SDHexString.m */; }; + 7074EA7FCC90B4967A437F5C43496828 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 72A3538489B763F7B56A501FBD3F6DC3 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 711D32EF4A9901567A488291603BF906 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FBB3D95250E585EF0343DF2BC5290AA /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 71538A1D21015F459964BA625D5EE90A /* NSObject+MJClass.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3BC3B9889D1DBDA3735ED1B8C20E49 /* NSObject+MJClass.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 717F76926C7BCB5B10C3037AD9239084 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 26EDE554C5CF56F050377BDB96246E48 /* SDImageIOCoder.m */; }; + 71BEB1D9532900291A5A24B1C038516F /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C5DC4F3097B42D433DC149C99560B79 /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 71C728A8D0E7F5EAD622B20F78E49BB8 /* LOTAnimatedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F38216E4EE5B308BE7B8F5275B5828 /* LOTAnimatedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 71F2B8CBB99087F348C472230200586F /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7860AB8DCEE1B27AFC0F52F691F56817 /* SDGraphicsImageRenderer.m */; }; 723D1925C39764631641D0DBFDF6833B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - 724991CA89C46BAFBC08264D94D86484 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = CA67A34B63E36E76FF453D2ABD613A39 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74ABF19BACB99F862DB62AA14508AFA0 /* LookinAttributesGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 594BEBF4113035634E37CC4FC2A11D62 /* LookinAttributesGroup.m */; }; - 74C474676C69A80BEC29B0F55FDF4D19 /* UIView+WebCacheState.m in Sources */ = {isa = PBXBuildFile; fileRef = 96D5456A17DF66E262562E8208ADEFF0 /* UIView+WebCacheState.m */; }; - 74E069F8C9E22C0E37F261A5AB03A613 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5A249D6ED704F9FEE1FFBC9B61426F /* SDWebImageDownloaderConfig.m */; }; - 752822FE3F5092322D18FEC4533B79A9 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 94E4D004CAC99A7D4B7144E86418C29C /* SDWebImageDownloader.m */; }; - 75771A97B77FA30A0175A81B480F80EF /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A67F3F63FB3C05544B8F66F7ED89E74 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 772CF8E9CD02ECA4275B6173E2110E80 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 31E7ED25B098BFBF30E180BFC0E2174B /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 724991CA89C46BAFBC08264D94D86484 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = C0AAB77E4C420DA681A4BCD59FECD513 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 735F9D7C7E50C74D3E6E9788B1963F7B /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 491F20A2F26A8145341552081FC3F5E2 /* CGGeometry+LOTAdditions.m */; }; + 74ABF19BACB99F862DB62AA14508AFA0 /* LookinAttributesGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E4FCD9CEBFE2AEFFBBDCA5661E5113C /* LookinAttributesGroup.m */; }; + 74C474676C69A80BEC29B0F55FDF4D19 /* UIView+WebCacheState.m in Sources */ = {isa = PBXBuildFile; fileRef = D43D784C06EA26B53EBA084984DCD356 /* UIView+WebCacheState.m */; }; + 74E069F8C9E22C0E37F261A5AB03A613 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B921FF6F8D91DE355289CD299B0C48A /* SDWebImageDownloaderConfig.m */; }; + 752822FE3F5092322D18FEC4533B79A9 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = C5EA0EF8AD8CE478D76BBA3591A7CB3A /* SDWebImageDownloader.m */; }; + 75771A97B77FA30A0175A81B480F80EF /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA99B210CCC1F3D215A774A2CB6F0046 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76A2AD3B74670276694332C4D99B7F4F /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = D1720047A5DCB4CE5426151172A9CD87 /* LOTShapeRepeater.m */; }; + 76F5221887D040D5DE3321B338D5D0E3 /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F6F069568EBFAC24459C7196A417B23 /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 772CF8E9CD02ECA4275B6173E2110E80 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = BEE1C30050F9C1B5AE62C7583A229DFF /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7873F2F89CD0A435FAB776BC27BFB56A /* MJExtension-MJExtension in Resources */ = {isa = PBXBuildFile; fileRef = 43EAAD2AB7E6B407E80E95F643F93D22 /* MJExtension-MJExtension */; }; - 78A3C3994AFFC6A2D4970AEB6D797CE5 /* LKS_HierarchyDetailsHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 94310BE9068195ADA7842BD0A9A7F782 /* LKS_HierarchyDetailsHandler.m */; }; - 7902D28FC9EF5AFEB452F508C7F266B1 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF1C0B2DCF27A6785AA511B6C9290B9 /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7989A6E79BFA78440C39F568D972305C /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = A53791C99F3E8789C928D8471E4310AC /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A4EB9ED5D4E03170FFE61FCB299687B /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D30CE312289056E4C5788AB47438FED /* SDAnimatedImagePlayer.m */; }; - 7C45DBA62EE045C4922404182F6393B8 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = EE96F8DD901EEB1A8375B055EDF7DBBE /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C53FB6BBB0CBAA879F1603B0FEDB80B /* LookinAttributesSection.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6193F470BF021CAED5E3E0DC4F602E /* LookinAttributesSection.m */; }; - 7C5505A2D3F2A697A5F324787061F4B7 /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BA0DD426F8305DA317D708459ABA12F /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C8782A3078662BC2EF639A9608A2C82 /* LKS_InbuiltAttrModificationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 37559870F51779045F8C7A57C1303E2D /* LKS_InbuiltAttrModificationHandler.m */; }; - 7D736CE5AD0A987D2A7D2FD72E31BF41 /* CALayer+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = A99D2B8B886EDA66D95608FD72CE97AF /* CALayer+LookinServer.m */; }; - 7E4F0978B25350B2B28678A0BE7B3785 /* LKS_HierarchyDisplayItemsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 52FBF3084E82AF80B1B017FB5240AF4F /* LKS_HierarchyDisplayItemsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E8A564A958AF81E5F63F34B8E550E58 /* LookinAttributeModification.h in Headers */ = {isa = PBXBuildFile; fileRef = 06660480BC631DCE06583A85704487AB /* LookinAttributeModification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F10C0D094C74F2FA4CD38C7FD77B0A8 /* WKWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 0426BF3118E242E4EA8BB1145A2A6F60 /* WKWebView+AFNetworking.m */; }; - 7F886FC2763F0BF1625A24EE4F94C04D /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 32556CF656ADFF88DE99F135C7BE2EB7 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FA8C78DB021A7731D30D80C102DE042 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EEEDD3CF0530751FD80AFB402DAB153 /* NSObject+MJKeyValue.m */; }; - 7FF8A56511E71D6FEC966BF9FEE135B5 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 245FCAB926AF197B8F4E931DD8477D4A /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 810C8D7902163BBA0185A4A112B2DFD6 /* LKS_TraceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A3868E0511721B009DE0A628C978E4AF /* LKS_TraceManager.m */; }; - 813BE4C96A6D39C13EC50C6CD164F0AF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 63B2D397715E1B3990E46DFCAE0A73D5 /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81A5635CEA2AD9623E30CAE9AFC3BF65 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E12075C58652877783AAD26D8A6ED78 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 821FF6B43F7ADAB6B60459D2966B33CB /* CALayer+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = E857EC016B703D1261AC73360907C980 /* CALayer+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83530BF68848CD2C4A79A1FD69B304A5 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E5514D264E4855320B70B7010325576C /* SDImageGIFCoder.m */; }; + 78A3C3994AFFC6A2D4970AEB6D797CE5 /* LKS_HierarchyDetailsHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EF74EDBD0485FA771A9AA64578456F20 /* LKS_HierarchyDetailsHandler.m */; }; + 7902D28FC9EF5AFEB452F508C7F266B1 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 321912138DF88B91861FB8BC409A0A6D /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7989A6E79BFA78440C39F568D972305C /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BF4C6C2E87BA6C07064482E607F1260 /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79CE3BE0C79C050332690E1D010FEAF8 /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BB06B9629E7573A790AC5CDB462FC7 /* LOTAssetGroup.m */; }; + 7A4EB9ED5D4E03170FFE61FCB299687B /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4500370110CE30F38E5EB8141CCF86 /* SDAnimatedImagePlayer.m */; }; + 7AD26F49DB81BB5A881A9B5EB1C93A4E /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C0D854E09D16BB681D45ED327BAC8E /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C45DBA62EE045C4922404182F6393B8 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = BE6317D3454F388D89BF78E6FB60FA53 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C53FB6BBB0CBAA879F1603B0FEDB80B /* LookinAttributesSection.m in Sources */ = {isa = PBXBuildFile; fileRef = B9E4E4DB23E3D62978DB3C96EBC232E3 /* LookinAttributesSection.m */; }; + 7C5505A2D3F2A697A5F324787061F4B7 /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 802604B240799DBCE659B6A4EF81494F /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C8782A3078662BC2EF639A9608A2C82 /* LKS_InbuiltAttrModificationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = D073E6FED4775C3235BF126A12EC69F6 /* LKS_InbuiltAttrModificationHandler.m */; }; + 7D736CE5AD0A987D2A7D2FD72E31BF41 /* CALayer+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3E1BBDFB2CD0C8F56D46781C6DB677C /* CALayer+LookinServer.m */; }; + 7D91765FE5B6F3C33BFC7A6AACB1C381 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F64D8209A95F7EDEB2A03CF15FB6F5 /* LOTAnimatorNode.m */; }; + 7E36C96F45A0BC0F7AACA6CC5E25630B /* LOTValueCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B4B48C725B5559AFC3A087A2E7D5FDF /* LOTValueCallback.m */; }; + 7E4F0978B25350B2B28678A0BE7B3785 /* LKS_HierarchyDisplayItemsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = B0C97676D17D86D3A7AEB30E8C2A74CF /* LKS_HierarchyDisplayItemsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E8A564A958AF81E5F63F34B8E550E58 /* LookinAttributeModification.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F5FF5E3E9A0A55CAB1DC5D3F46714C /* LookinAttributeModification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F10C0D094C74F2FA4CD38C7FD77B0A8 /* WKWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 2243DD00DE471869684FE10CFA3F77E3 /* WKWebView+AFNetworking.m */; }; + 7F886FC2763F0BF1625A24EE4F94C04D /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 81274F7057ADBF76FED3362415EC55DC /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FA8C78DB021A7731D30D80C102DE042 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 51206F690E3F9EB32D282C65DD5035A8 /* NSObject+MJKeyValue.m */; }; + 7FF8A56511E71D6FEC966BF9FEE135B5 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A36446F389ACA7531C9A4868C788181 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 810C8D7902163BBA0185A4A112B2DFD6 /* LKS_TraceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C45AD5914D7F2D615D3F9C00772CD6DD /* LKS_TraceManager.m */; }; + 813BE4C96A6D39C13EC50C6CD164F0AF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DBED93C98FBCF02E6C348D72AE3467E /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 816784C7466CB9CB43591F199E50B8CD /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = DF3A384C92120AA95174EEA0DED570DF /* LOTShapeStar.m */; }; + 81A5635CEA2AD9623E30CAE9AFC3BF65 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A3CDE16C316BF2E36E352A45B9801E /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 821FF6B43F7ADAB6B60459D2966B33CB /* CALayer+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C29A18D472C825E20C2397BC80B427 /* CALayer+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 83530BF68848CD2C4A79A1FD69B304A5 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 108CAD04AE05DC568C1E9E7A16D52875 /* SDImageGIFCoder.m */; }; 83A4F2816C1B3F072E1A26A34C3BC4AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; 8414CFEEB64ACA817EB88D2FEADDA3B3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - 854807558DCB972EDDFC1D00032BA6E4 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 99418F0A943BD9FF46795740F7385472 /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85AB23275E9D19394969235E5DC2300E /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5989AAAB35D0B7EF697456F3897FACEC /* MJRefreshHeader.m */; }; - 85BB8B4B5C29C5EEC52282F33A4CAF23 /* LookinCustomAttrModification.m in Sources */ = {isa = PBXBuildFile; fileRef = 4730B0C65CA50BE6D828887D7CC8EB9F /* LookinCustomAttrModification.m */; }; - 85C0B4EE334B9972299E62DE61A4BB56 /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D601D33EE8BB8396FF4AED582379432E /* SDImageLoadersManager.m */; }; - 860CB3A5D2E13B946CD2EFB7F749C4CF /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = F53768EF8D38709F253FC1C181B05162 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 864972FB0DF4B464B1B505AA5F788E91 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = DE9EB519F0B4BF7D539877F733F7BCAF /* SDInternalMacros.m */; }; - 88473AE7C22F952DACB39FA0758D1624 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 24998A1052F45827E4FFAFAF7FA1542E /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8872BEB0954C0254A792469F4DBC9891 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9450EAE5D947C741A2403ADD203E1875 /* MJRefreshAutoStateFooter.m */; }; - 88A23DF6F5638AC66C28C4102824E8B5 /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B993C5AF69BCC11CB58D180BE7475BE /* NSImage+Compatibility.m */; }; - 891AB9476B659A3490DCE45A52A8D132 /* Pods-keyBoard-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D8E1EB42D41EA6B94901E5B68C9011 /* Pods-keyBoard-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89B88FAD396608AAA9F935E471BB3CB9 /* LKS_HierarchyDetailsHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E355B215CED31C4C6EF33EEB9E95B38 /* LKS_HierarchyDetailsHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89EAB8D0452D0E2114ED971B10D98CC3 /* LKS_HierarchyDisplayItemsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E2B86406A2B5383183DAE9ABBBB3893 /* LKS_HierarchyDisplayItemsMaker.m */; }; - 8A256CA266FB314BBD4DB2287DAEF247 /* LookinAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FCB45CBC3B45614560DA456506F73F1 /* LookinAttribute.m */; }; - 8AF38EDB1E9BF0D334AEB23C488870B8 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DBD5C23623A08CDD875999AA28A1F8D /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C6C7E25C5A24C936F81823978190E96 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B4D76F7EB1CE870804724BC071C5ACB3 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D8AD606ECD8E1F247965CD43956D412 /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8F3F4E9CF14305D8C83582492FEA87 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8446D9DBB13D294C267A12BB9677A31B /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6026BB762BA16A1209DFA57F8EC18A74 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 854807558DCB972EDDFC1D00032BA6E4 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 696B681353CC0D5CC37B2FECABDA024D /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85574CB0CE4228BAC11E880230E55E66 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = E2EA7A82A59375A3B3BC245067E1E39D /* LOTPolystarAnimator.m */; }; + 85AB23275E9D19394969235E5DC2300E /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = C72375EC7D8FEC4DB92BB3A0C474BCE2 /* MJRefreshHeader.m */; }; + 85BB8B4B5C29C5EEC52282F33A4CAF23 /* LookinCustomAttrModification.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B727AAC500EF9B539E094E9C11C4D7F /* LookinCustomAttrModification.m */; }; + 85C0B4EE334B9972299E62DE61A4BB56 /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 93193A0E6ED742E3C32B70F716E052AA /* SDImageLoadersManager.m */; }; + 860CB3A5D2E13B946CD2EFB7F749C4CF /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D48C6742E38C4FE45D03CC723412748 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 864972FB0DF4B464B1B505AA5F788E91 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED479666B63A993A473B42BC9964FF5 /* SDInternalMacros.m */; }; + 88473AE7C22F952DACB39FA0758D1624 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 143EC1D5A4E77659DF21C85FBEBCF739 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8872BEB0954C0254A792469F4DBC9891 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = C2766BD63788096A153613E7FA57A56E /* MJRefreshAutoStateFooter.m */; }; + 888A30123A40AD6B41855194C7353882 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = E9681148E66F6D1870DA59EB4F7EB722 /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 88A23DF6F5638AC66C28C4102824E8B5 /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = DC66CE51768587BF0EA80B078A703479 /* NSImage+Compatibility.m */; }; + 89B88FAD396608AAA9F935E471BB3CB9 /* LKS_HierarchyDetailsHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 52008EBCE708172DDA08785A2F800A52 /* LKS_HierarchyDetailsHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 89EAB8D0452D0E2114ED971B10D98CC3 /* LKS_HierarchyDisplayItemsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = FA170CA19720D074821683D051836EBF /* LKS_HierarchyDisplayItemsMaker.m */; }; + 8A256CA266FB314BBD4DB2287DAEF247 /* LookinAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EB5EF60FB5747DD4C005BBA2CEC46A5 /* LookinAttribute.m */; }; + 8AF38EDB1E9BF0D334AEB23C488870B8 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = A395F41796B1CE2361DF4DC1913B4D6A /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B04467560C43914FDE87559AADB2CC3 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = E5378B0C2C473D252DF9777266E174D1 /* LOTPathInterpolator.m */; }; + 8C6C7E25C5A24C936F81823978190E96 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B4E0902E263D01CA193C82577929F839 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CA5AD424A06C76F97DE092EDC148F00 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0DA04830283FDE4CF460F848A504417A /* PrivacyInfo.xcprivacy */; }; + 8D8AD606ECD8E1F247965CD43956D412 /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 354F2536ED984CA4D2D0557F44DD98EB /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E75E3BCD5E5A3DE63FD7D93AC456232 /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 22B6BB9CDA19A8DDDA9A41F3FD59CE86 /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8F30C8026F48C60D5B2CAE9CFC166004 /* Pods-CustomKeyboard-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CB13D51E717D347023EEB57263E3072 /* Pods-CustomKeyboard-dummy.m */; }; - 8FF7B6477BFA6E6ABA168E1417291D5F /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = ABFE70D35403EBB3D3B8E84170698E30 /* MASCompositeConstraint.m */; }; - 906DCE66CD5BD236081D468616199BB7 /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = AE4708C50A24F74BB9721BF97FDD4782 /* SDWebImageOptionsProcessor.m */; }; - 91AAF555B286FBF53E4F98D092B406BD /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E3D65B846C5EFBA9201404CD8BDC1DA /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 91E8B94F8E02ABF5197DF5AE7D0B3934 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 15EEB72FE94B15511A9B077601BFC002 /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 928371B066E1211CE87089668D5BCB4C /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F52BB443191BF5EA87C6419E4BAFFD5 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 928A1ED0692DF0229F66A87135F93F2A /* LKS_CustomAttrModificationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = FB260AFEB0CD406D8CDEDE623A1369CF /* LKS_CustomAttrModificationHandler.m */; }; - 9345137ED10358B60E37D05FB6165759 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4223ACF818570B18B88D6B2884075BF1 /* SDFileAttributeHelper.m */; }; - 9358FC6C6DA728AEE250D8E7DD236946 /* MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = BB20479CEB729CCB614B58BD2EFB3BB7 /* MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93E8C78EAE0B7613201813966B8E04E2 /* Image+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 2039E8AAF8AAC77E31E425C61871263D /* Image+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 955B87902E039163281C4F47C95DB851 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 426AEC2F7F358DEDB66C3F2D15F925A4 /* MJRefreshBackNormalFooter.m */; }; - 96E97174F4614FFA0649085022CB4AFE /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4BA3056A1FE6B47E97AA549D4B9423 /* SDWebImage-dummy.m */; }; - 97235408E59E16C18B6BDA1D29E1CB26 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 036896A95CE28AB066292A03BAD2BFFA /* SDWebImageManager.m */; }; - 97385A64CA020489951EF769392C6DCF /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE06F501FB1F02940458122AC396D62 /* UIView+WebCacheOperation.m */; }; - 9887678D7D6BC165694560D92AF2C31A /* LookinConnectionResponseAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B6B095661E36C4E8A066559D4D5AF33 /* LookinConnectionResponseAttachment.m */; }; + 8FF6AFBAC7376E30409C4CBA3C779CBD /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = CCB70D51423C0005A24CC968EFBF177C /* LOTBezierData.m */; }; + 8FF7B6477BFA6E6ABA168E1417291D5F /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BDC97000BCCBCD76929EB4158EABBF7 /* MASCompositeConstraint.m */; }; + 902A0341EFA3C8257D7E0635AA7FF100 /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 27B5D6B05B61EFEC8D039AA8C973FFFF /* LOTShapeFill.m */; }; + 906DCE66CD5BD236081D468616199BB7 /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EE840457EF72B6636A7558D7CA35A7 /* SDWebImageOptionsProcessor.m */; }; + 914E0A2EAB27FE83F8469DD989C71C0B /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4949909C0F4226098058AD880A8C6772 /* LOTRenderGroup.m */; }; + 91AAF555B286FBF53E4F98D092B406BD /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A7DFAA6909322BD702F66A06CDF4D02 /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 91E1DE283CBEC23FBD4D2DAC02F4761B /* LOTInterpolatorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B5B21AFCADF2084C13FE18D9005357A /* LOTInterpolatorCallback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91E8B94F8E02ABF5197DF5AE7D0B3934 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 805ECAC86B71F29AEECB62A9EB78501F /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 928371B066E1211CE87089668D5BCB4C /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 519155D50D1329095FB54FA510CFD59B /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 928A1ED0692DF0229F66A87135F93F2A /* LKS_CustomAttrModificationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A9FE906403E0EF37A9C433441856AE0 /* LKS_CustomAttrModificationHandler.m */; }; + 9345137ED10358B60E37D05FB6165759 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1D86F67FBC7E9087B8D96626CF725E /* SDFileAttributeHelper.m */; }; + 9358FC6C6DA728AEE250D8E7DD236946 /* MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B7FBC2AB719120F37255CB203D19C30 /* MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 93C3CB83BDB4A866BB069674F1F299F3 /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF554DF7D95156FCCD2EA302AA0138F /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93E8C78EAE0B7613201813966B8E04E2 /* Image+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = E817C5158801A50C62075BCDB67C7071 /* Image+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 955B87902E039163281C4F47C95DB851 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 02186FE758CB83D1F7BB1BA950BFBDFC /* MJRefreshBackNormalFooter.m */; }; + 9563A0AA5DDDD9A563C72011405514F7 /* UIBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 9265F447C9314627E92134CEBB84E26A /* UIBezierPath.m */; }; + 96D85EB10EEE95570327E9EDE152A893 /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 387311E074CEB0F9F817707896689271 /* LOTRoundedRectAnimator.m */; }; + 96E97174F4614FFA0649085022CB4AFE /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B901955271B5EEB0A054B4C18AAC88A /* SDWebImage-dummy.m */; }; + 97235408E59E16C18B6BDA1D29E1CB26 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D34A5B2E9A897625C6F45474D9F8C1D /* SDWebImageManager.m */; }; + 97385A64CA020489951EF769392C6DCF /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A691F74671359BA6CAC003C770AA9125 /* UIView+WebCacheOperation.m */; }; + 9887678D7D6BC165694560D92AF2C31A /* LookinConnectionResponseAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4ED50F3043D29BF308EA6C5E2D4199 /* LookinConnectionResponseAttachment.m */; }; 98AB6B8EB7FF096BCE87488C5AB3DF1C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - 9A7FB1E975A5955C896E6B195C521804 /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = B70FF2E3C927A22C388C16FE8C3F56DB /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A89C16038149623A1DF06D47E7F953A /* LookinStaticAsyncUpdateTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DDE67F73A61A7328413374AFFA92E85 /* LookinStaticAsyncUpdateTask.m */; }; - 9B06400877E40C173F5A1C9761F288CB /* UITextView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = D54A6D034409C4B729B7DBA2D502B89D /* UITextView+LookinServer.m */; }; - 9B1EF09A8A473D92C1258B00791BF5F0 /* UIView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = E3ADFF983A9B025AF718C3D24404E480 /* UIView+LookinServer.m */; }; - 9B3420DEB8A0CCB9E1241A669AEFCA8E /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA061B3651D9243CBD96694626B95C1 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B9343E8599EE5196BA75E842DCB48B7 /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = F2817892F9F21CF8BF9F8F35D58385AD /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9CE425B89294BE2C13E70A86E75B15CF /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D6C233C8BB873C737FFE3E1DFBC2A186 /* SDDiskCache.m */; }; - 9D422527A25BAE6A207DEFE11958ABBC /* AFCompatibilityMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E5F4E4918198D7216ABDC0BE4C9BFCE9 /* AFCompatibilityMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9DDDCFC08B54A61C519DA78F94464E6B /* LookinHierarchyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 56A3EB69345768D61D52161327AE66C8 /* LookinHierarchyInfo.m */; }; - 9DE398BDF0CD7F38181F2F751AC18CB2 /* Pods-keyBoard-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 969A9A842778EFB5D62826500DFF4E11 /* Pods-keyBoard-dummy.m */; }; - 9DF446F8CA5BC4D4098766EC9063012C /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BF41BBB1EBC1FE4F91BE320D947ED64 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9DFFD4780CA32B8E53D9F4FBC8B3F5AC /* LookinAttrIdentifiers.h in Headers */ = {isa = PBXBuildFile; fileRef = 94CD4DB147D9FC14A9FB75335D8AAAF6 /* LookinAttrIdentifiers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E3C5CB1C97B2ED16218956999BFF7AC /* LookinTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = D03549B19B7C1700178CF12088FCE44C /* LookinTuple.m */; }; - 9E6B00AF2ECE462D4D3C42AFC02F2AD7 /* LookinEventHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 189A631A2ED6331F0A226846AD73B1E4 /* LookinEventHandler.m */; }; - 9EBA682DA814406E9E5EF300587AF341 /* LookinAutoLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0301A3F865A2919DCD43EE9D0DC363A5 /* LookinAutoLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F89DCAA4092F3897E43E89842069A26 /* LKS_AttrModificationPatchHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 477B43B19C3181419CE0D39929320355 /* LKS_AttrModificationPatchHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9FB234EB4D8B5BCC699DB491E204594F /* LKS_GestureTargetActionsSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E82EAB687527F885E79D9835727B3F8 /* LKS_GestureTargetActionsSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A078A275FFFA48D620074790DA3CA6CE /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A9927A87E21A8976D18DC44FE50014 /* MJRefreshStateHeader.m */; }; - A0E0DC76F51300E7EB1EBA5492DE854D /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D125D803F381B689272DFC8613DDA9A /* UIImageView+AFNetworking.m */; }; - A1560247914C760D9EE5F7A2392CC06C /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DFD54923DA02EA135A1A1E2F56CBDE1 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A7FB1E975A5955C896E6B195C521804 /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 21F65C758C599537C151265FFA275338 /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A89C16038149623A1DF06D47E7F953A /* LookinStaticAsyncUpdateTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E30C942904CE23D0B0F44D4333934C5 /* LookinStaticAsyncUpdateTask.m */; }; + 9B06400877E40C173F5A1C9761F288CB /* UITextView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B0AB2FFDDF0BA8CF4ABB961544D39B /* UITextView+LookinServer.m */; }; + 9B1EF09A8A473D92C1258B00791BF5F0 /* UIView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = C8955B6E5F0B69616ECE5ED535BA9EC2 /* UIView+LookinServer.m */; }; + 9B3420DEB8A0CCB9E1241A669AEFCA8E /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 360B11050A020700AC654D7E70206A75 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B9343E8599EE5196BA75E842DCB48B7 /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 76A90BA0FDEB19E5BCD2C7BAA9C0134D /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9C76C5296BEF3FFCB395328AC44A33FF /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 45920C19D3CF59590B6DE6FBD0F6421A /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CE425B89294BE2C13E70A86E75B15CF /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C2CA34C66E1BD2C48A82C7DB56E6D6 /* SDDiskCache.m */; }; + 9D422527A25BAE6A207DEFE11958ABBC /* AFCompatibilityMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D206582B10753CC407DA8C884CE7BCC8 /* AFCompatibilityMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DDDCFC08B54A61C519DA78F94464E6B /* LookinHierarchyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 505B6D482600E8CF81BAB5C58BF74C3A /* LookinHierarchyInfo.m */; }; + 9DF446F8CA5BC4D4098766EC9063012C /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 35030695B7BEB6D9746F4153406B5234 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DFFD4780CA32B8E53D9F4FBC8B3F5AC /* LookinAttrIdentifiers.h in Headers */ = {isa = PBXBuildFile; fileRef = C1EDAC4AA18A387C4C2CF424D649014C /* LookinAttrIdentifiers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E3C5CB1C97B2ED16218956999BFF7AC /* LookinTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = C32357BEDFDCCC4A7A7CFA2B54A15C60 /* LookinTuple.m */; }; + 9E6B00AF2ECE462D4D3C42AFC02F2AD7 /* LookinEventHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 440E94B9AD51FDF38170F43B90585F96 /* LookinEventHandler.m */; }; + 9EBA682DA814406E9E5EF300587AF341 /* LookinAutoLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 655E010C4B8E2AC28F2C6694262257E0 /* LookinAutoLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9ED40BA9177917BE85A7EA4980113B11 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EA930B7283346D0F5B2C28086A3A09D /* LOTShapeCircle.m */; }; + 9F89DCAA4092F3897E43E89842069A26 /* LKS_AttrModificationPatchHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D2A58A3F59B220AEFF680CFDB7B9FE8 /* LKS_AttrModificationPatchHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9FB234EB4D8B5BCC699DB491E204594F /* LKS_GestureTargetActionsSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E4F3A2EE59F965CCB3DFC48563C25E8 /* LKS_GestureTargetActionsSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0736183186A760F5659A4C79ADF0918 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E791076E93327531D61CDE166C6D0F3 /* LOTRenderNode.m */; }; + A078A275FFFA48D620074790DA3CA6CE /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 412199FDA4EB083F463E1C33A21C8CC1 /* MJRefreshStateHeader.m */; }; + A0B721931C444BA78A87972BD5684E6D /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F1065D9927A1CEB37170CF303120F8 /* LOTShapeRectangle.m */; }; + A0E0DC76F51300E7EB1EBA5492DE854D /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 233C37AC69FFC5B7F27E6C9BA33D8F2F /* UIImageView+AFNetworking.m */; }; + A1560247914C760D9EE5F7A2392CC06C /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 37FC258EA782835D2F4B690CE8D18C4E /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; A1A1266FD70CEB545FD7602CC33F2F7B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D673941813D9CA4EFFC6C32109054DC5 /* QuartzCore.framework */; }; - A1ACD509069144C27542774A41FE0243 /* UITableView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = CAE0A8B09C0AF83117C6BC9602D5D41F /* UITableView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1DC9EFDF50DF0EAF24D9D7C219AD2C1 /* NSObject+MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 364231170128CA2CD3F9589FE34C2FAE /* NSObject+MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1E44277704AD68E867FD7C955A6632D /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 948E1E3EDCE53B021791B9169CCC28BD /* MJRefreshBackGifFooter.m */; }; - A324722BA42F21E98F158EA6C133D715 /* LookinServerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = FEBDC1C9F54DE3E90674A96F19B3458A /* LookinServerDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3EA39A13714B3103B82F4066A642F53 /* MJExtensionConst.h in Headers */ = {isa = PBXBuildFile; fileRef = C342060C11E55E0DDCC3A84C8C1FBC35 /* MJExtensionConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6728DA26A7C457B78A7A3CCFA9D9A10 /* UILabel+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = ECA6154AE35962F20A086F5A3633C0CC /* UILabel+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6B2B022993BBC55550CFBB0A0C78209 /* LookinConnectionAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = A6EB4E3885146B9E8EBACA05C540E733 /* LookinConnectionAttachment.m */; }; - A6FCF74348D1907891FBDE3F2E331136 /* DZNEmptyDataSet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE4C2596FA0518DD6CED29332B75B5B /* DZNEmptyDataSet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A839428F403C52D8AA3466B65E20C27A /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1110127348EF0DD2FF03A68A13D86895 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A86CC1AFDFDD692DC4EE66F57C0F39E6 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 0236FAD4E41045C8223B36E40BDEDF2C /* UIScrollView+MJRefresh.m */; }; - A8AD2AE9695630E93DE504211EBAFBF1 /* LKS_CustomDisplayItemsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F10AABF341F29547C8D1C780B3F8861 /* LKS_CustomDisplayItemsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A92AB5E65CA85947368E46E6627F1BFB /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FC8B5F084763484BB92BA1D312960E45 /* UIButton+WebCache.m */; }; - A93BA1C5A4FFEF3ACF371690485A2703 /* NSObject+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 87D20D63606C6DC8B53F345069126C44 /* NSObject+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9609EEBDD5FD40292925E80ED84D5DF /* LookinServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C4BB81E05861A9C00B09F3A39D27B164 /* LookinServer-dummy.m */; }; - A9A49E4A3BE8882F60DF32BAF39DE191 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7AE763582816CA9E57C0D78A7D1A49 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9BEDE2ADF9D1E0D0D1A241806A1A486 /* LKSConfigManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A98ADD6BF259F1E366B570C576632 /* LKSConfigManager.m */; }; - AA1EA8F0F0470F1596B1FFA58ABF3375 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C5C306F08907FB9E1301EA07220C6EB /* SDWebImageDownloaderOperation.m */; }; - ABCB80C4813C849FC93D57676820C907 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CA1F0AA7C906C09D35E1B3B781EB6E0 /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC14E56ECA7A4980A8E1CA68E800B12C /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E83988FA8D9C00FAEEA94EE0633C2C5 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC710813CB6A1DAEEE45914402F864D2 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = DF383723C6CD6F7B6FCFE6C752DF50AF /* MJProperty.m */; }; - AE69A3B75BEEB9E2C54168BF0C502BC6 /* LKS_RequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 68C023D8DAEB5C5E7F36F7020DDBFE63 /* LKS_RequestHandler.m */; }; - AE7B02645B8F769CA5F215EE8F7CC5B0 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6289794567935CA3DC8B5C49AEA74043 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF185CDCA462AD6450543676951C82F9 /* LKS_ObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = FF266D90F27C22E50821C68FB0B959D8 /* LKS_ObjectRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFD1D411A9387DCEC6F0034653E23787 /* DZNEmptyDataSet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 52CE89D1B7CAF7D6D1E509FE1267800A /* DZNEmptyDataSet-dummy.m */; }; - AFDC0B8255B2F3CED8E609F8A3BD1CDB /* LKS_AttrGroupsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = EA281F7D07872BD2CB3C821E84CCC544 /* LKS_AttrGroupsMaker.m */; }; - B030B558BE97E0225652EFB8C8FA431F /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A565D25677F6FEEAD298666682CDA4B2 /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B09F08548ACA8379445F6525011EE219 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E24EFDE111F674B782A0DB6E26DA6D2 /* MJRefreshBackStateFooter.m */; }; - B2704AFFC5CC053154839DB44924D255 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A57C810A36EA495CAFAEDAD83C19A651 /* SDImageCoderHelper.m */; }; - B2B5444DFE63D2835A7561C1D64C9344 /* LKS_CustomAttrModificationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 834B6D6A1ACFBDDF049322F2ED0C17DE /* LKS_CustomAttrModificationHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B2BC43DEC8DE2B9234693FE3782AB76C /* LKSConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD83C0A67C6DD93C76CB6563151D889 /* LKSConfigManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B331CE2D3DEB461E738B886086A365F9 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 89485243816A18F41367AE862167C061 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B48A975992E58328254C494F133DE467 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 336D23D3AF9B2B8FD356A62D7B4A2A05 /* NSObject+MJProperty.m */; }; - B4F231C5CBAB3D4A184699D0066E0E83 /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 93FB055BA93E62482AD7154A938F761A /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B565C08CE947CF591B1D3582272D5E1D /* LKS_CustomAttrSetterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D74E044AA7CFE331B6C3B53D98B1022 /* LKS_CustomAttrSetterManager.m */; }; - B59E60FBC9665FC1061B88B8E6FD9FAF /* Masonry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 31C3AFC445B760812F9E6924ABB9CC15 /* Masonry-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5AF87C11A465F666473F6191D173905 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C9154FA9EFF76FE4C993ADDBEB9A5EE4 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5C521FFB8E09DFE348238E21556842F /* UILabel+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = C23D52958B18447DC5C865BB12951C58 /* UILabel+LookinServer.m */; }; - B66356D4E7E43B3D15324569AA7EBB05 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 929BD46DB08827C3FD713BC0E928C239 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B680C2604BD8BC9644AE7C67BC46B9BB /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B53F06F74B4F928AF69994EDA63D71 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B741DBE2A466E6211F879EF997D9322D /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 89023F2C23C8826F172885D263CC29D2 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B79864F972C51037B350802D8CD48024 /* LKS_GestureTargetActionsSearcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F1EE18C1314EB74EEB6B6392E8EFB08 /* LKS_GestureTargetActionsSearcher.m */; }; - B81566F19789EBD9BE2714E2A6059D36 /* LookinDisplayItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ED096883562D4C47E188D0E5CB3065 /* LookinDisplayItem.m */; }; - B95C63A039D9D08896421291DEBD3AEB /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 960792D55E0D95EDBE31A27683F9FEEF /* SDWebImageCacheKeyFilter.m */; }; - BA904ABA8ED36CC4E5EB2B2004CA1F18 /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = F68B2B4FABAF7DB3BFD45E81B3302EEE /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BACAA91A92F35CD7E7795232A83F21D1 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD65B80E7AA07416BB8F502F3C3A438 /* AFNetworkActivityIndicatorManager.m */; }; - BADA31750A2136D073EDA4461DBE1EEA /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 615CFF22184D20B3B6107165A49D6FEF /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBA61EF31BFDFA6FCA34DC4EBE6E1D9A /* NSString+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 52EF359F996014A062F3A2945F10438A /* NSString+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBD85F9E0E25710317253841091C391F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = A6057C23DD0D9C9A5559F8F0DC47A97D /* PrivacyInfo.xcprivacy */; }; - BBF5FDA7D647517E2F904FE8E5596D96 /* LKS_AttrGroupsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB9874FA4C241C24657D3A825C00C66 /* LKS_AttrGroupsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC2F9B1D6986FEB23B4FB1288B512538 /* MJRefreshNormalTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E1E4CE0CD5AF60097B9523ED2201F8 /* MJRefreshNormalTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC5458210A973BC7A29D1F45D458A14B /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0696D0619ACA95D8E9E7EFDC0CD595D2 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC7A1933CCF40C3C5E2E4A70AD2D0657 /* LookinDisplayItemDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3E4B841669D08E886FD8D7A86C654E /* LookinDisplayItemDetail.m */; }; - BCDC1E1D46DD124B5726A064D2EE66A3 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CBB9E2731CD9B8F896AD9F7398CD3F6 /* UIImage+MultiFormat.m */; }; - BCEFDE57BB0E0B36731C8D39FFA1BE2C /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = ED216C76AB8BA24D783B6A22E1E01C97 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD30193C1E3D7B1F17B1B1F3F08BE655 /* UICollectionViewLayout+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B7D4D5B8A3207BDAE71FAE9F1B443CBF /* UICollectionViewLayout+MJRefresh.m */; }; - BDBE494BAC544843982C3CA96A6C41DD /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A522D0661C437F2B97B12A18A3478A1 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF0C3D2782FE1425C2F1F8827132A94B /* MJFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = D9B1F5912311585292CF1DB19B5FF418 /* MJFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF22D137EF6324675FA50080C5D93C00 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D45408149C7FF7C3CD91B6DDBFB7448 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BFAC671767912906E90060B0F4BED5FB /* LookinCustomAttrModification.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F154763B55BC95D1F3E0C64970B8D48 /* LookinCustomAttrModification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0D7926E41A294ACA98D7B033B283919 /* WKWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E466B1532DEF5F8A8FE002C3882E69E /* WKWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1D9802BE2A6410FFDFB1650FB9BA317 /* LookinDisplayItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7597119135479FEF90DC7CA9DDBF03A6 /* LookinDisplayItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1DD8C6A64F948E4C53560C76B995DA4 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = DB89640D4CA100127D613D0379809B5A /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2033A68F13923BF9B3EE19F39FC1411 /* UIColor+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F81A89C6E769F9B774524A9FE4BA70B5 /* UIColor+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2068AEACC2D9C7F1FFE41AA25B12A68 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 21628153BCD0325102EB502FB5AEDF0F /* MASUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2840BF1950FF7EE2DCD6D55F768A49C /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D64DD7369F8D81EDC16FC3539F46D73 /* UIImage+GIF.m */; }; + A1ACD509069144C27542774A41FE0243 /* UITableView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F6D2EF67498000316B8E225344818D /* UITableView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1DC9EFDF50DF0EAF24D9D7C219AD2C1 /* NSObject+MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = C13062FDE2308A9D2DF13CA742EB2C4E /* NSObject+MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1E44277704AD68E867FD7C955A6632D /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 391C48C35FC8E4BA5DD8A3B5FEE1EC06 /* MJRefreshBackGifFooter.m */; }; + A324722BA42F21E98F158EA6C133D715 /* LookinServerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B1F166DB7BFB53CC0B0815CCEDEFCB /* LookinServerDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3EA39A13714B3103B82F4066A642F53 /* MJExtensionConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D0F6419EF5C5127ACC00EAE195D8A2 /* MJExtensionConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6728DA26A7C457B78A7A3CCFA9D9A10 /* UILabel+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D81C868C1831665C180086D5F3CDCF6 /* UILabel+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6B2B022993BBC55550CFBB0A0C78209 /* LookinConnectionAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED90D2CA6E5F0A64EAE0846FA566178 /* LookinConnectionAttachment.m */; }; + A6FCF74348D1907891FBDE3F2E331136 /* DZNEmptyDataSet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0582AF8DFF5BDE75404B2D4484C8DBA8 /* DZNEmptyDataSet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A77E100C3A2B8B358510930A30EB0D04 /* LOTAnimatedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = A43A1A8E34820B27EC0FF37153158388 /* LOTAnimatedControl.m */; }; + A839428F403C52D8AA3466B65E20C27A /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CFD079B1ED36BF1AE2E2AE9A1553FF27 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A86CC1AFDFDD692DC4EE66F57C0F39E6 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = A72FB198DF157D1DBD45AC2B34B6CC9B /* UIScrollView+MJRefresh.m */; }; + A8AD2AE9695630E93DE504211EBAFBF1 /* LKS_CustomDisplayItemsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = BA95282A74089DF677AECC11548EC92D /* LKS_CustomDisplayItemsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A92AB5E65CA85947368E46E6627F1BFB /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BFB12A07B7CD710DC791392EF1601B2 /* UIButton+WebCache.m */; }; + A93BA1C5A4FFEF3ACF371690485A2703 /* NSObject+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8D59DCF5E42ADBC5FEE5FD7A017666 /* NSObject+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9609EEBDD5FD40292925E80ED84D5DF /* LookinServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DED0E6684133B62F60FD2914ADC6FEF /* LookinServer-dummy.m */; }; + A9A49E4A3BE8882F60DF32BAF39DE191 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DC586DD5612C6B4D55021FB5B6650A21 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9BEDE2ADF9D1E0D0D1A241806A1A486 /* LKSConfigManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1181A58E703113D29E11E933C4405B3D /* LKSConfigManager.m */; }; + AA1EA8F0F0470F1596B1FFA58ABF3375 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FFFEB5A4266C57EF054676F61E3ED14 /* SDWebImageDownloaderOperation.m */; }; + AA8C0F3F06FA3C69306C0EF728D62510 /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 523A4FED0C4F689E8EC3539D9AE5C995 /* LOTNumberInterpolator.m */; }; + ABCB80C4813C849FC93D57676820C907 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = BCEE9F77D163ECC2896D0BA650B77D3A /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC14E56ECA7A4980A8E1CA68E800B12C /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 869C7627AB8F6C1A6A1B23147909B2A6 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC710813CB6A1DAEEE45914402F864D2 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C5877EADFE0A161E5C97583382CB47D /* MJProperty.m */; }; + AE69A3B75BEEB9E2C54168BF0C502BC6 /* LKS_RequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B038BFC1B095F940837959590DA664A /* LKS_RequestHandler.m */; }; + AE7B02645B8F769CA5F215EE8F7CC5B0 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DB3F1D530B2E6D3D749981612DF4EF0E /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF185CDCA462AD6450543676951C82F9 /* LKS_ObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = A7EB235E011B9336A9AB300EF32D9714 /* LKS_ObjectRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF25A0AF978D4B51EF7558BBDF89CF26 /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = FE7F34046B9BD8DB88390AC9555EE37E /* LOTPointInterpolator.m */; }; + AF9CCC7D761E6D6EB33B720BD0BC5E87 /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = B3A62AE37BD18B6AA56FA1A3C995376D /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AFD1D411A9387DCEC6F0034653E23787 /* DZNEmptyDataSet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BBC8EA91BBF38DF80D0B2DD96E175D5 /* DZNEmptyDataSet-dummy.m */; }; + AFDC0B8255B2F3CED8E609F8A3BD1CDB /* LKS_AttrGroupsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E27852353DF8343675DE5B16E87CD7B /* LKS_AttrGroupsMaker.m */; }; + B030B558BE97E0225652EFB8C8FA431F /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 863D84A17942D0E17AC5468211A568A1 /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B09F08548ACA8379445F6525011EE219 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4477BB9DDE05D1D2E53E7D7AC8E674E5 /* MJRefreshBackStateFooter.m */; }; + B173B81A09F5DDB5C6B744CC77ACB97D /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F6F5579B9644EB3E8A7772977F641D4 /* LOTShapeTrimPath.m */; }; + B2704AFFC5CC053154839DB44924D255 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D452C354CC07110B793509CDC4B8B0 /* SDImageCoderHelper.m */; }; + B2B5444DFE63D2835A7561C1D64C9344 /* LKS_CustomAttrModificationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 907D64C007B298D9AB042498DDF5F69D /* LKS_CustomAttrModificationHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2BC43DEC8DE2B9234693FE3782AB76C /* LKSConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B4139AF3CC702B273D55B84E85D3950 /* LKSConfigManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3124A2A9478DF50DFF54CC64084DFEE /* Pods-keyBoard-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D8E1EB42D41EA6B94901E5B68C9011 /* Pods-keyBoard-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B331CE2D3DEB461E738B886086A365F9 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B89F80EAD4C23CB8FCA2C0DE2DCBE2 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B33A7774BCB3AE8C8F842F5DE3081EAD /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F54B9BD0AC7DE1FF9332ED5587CD502 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B3C72C3F5B34B02356C3335F050BD586 /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 984371CBE2AE756DB942C044D7C2B778 /* LOTShapeTransform.m */; }; + B3EFFC7FACEBBE732E39831D547B136C /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ADD179A4181B716094A3BA00A722A1C /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B48A975992E58328254C494F133DE467 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = A76EB6E6DE10435AD035A888EE1DE9CB /* NSObject+MJProperty.m */; }; + B4F231C5CBAB3D4A184699D0066E0E83 /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 675595D151642547CD310FE30A63A699 /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B565C08CE947CF591B1D3582272D5E1D /* LKS_CustomAttrSetterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C1FBC9F985B42A93BD8503A205B91979 /* LKS_CustomAttrSetterManager.m */; }; + B59E60FBC9665FC1061B88B8E6FD9FAF /* Masonry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3628C45AD1D63F88BECAB6047AEA970F /* Masonry-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5AF87C11A465F666473F6191D173905 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 47492A13064C3475DCCF32BB8843589D /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5C521FFB8E09DFE348238E21556842F /* UILabel+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = A87DF1862223389B1D01641A7A9EA306 /* UILabel+LookinServer.m */; }; + B66356D4E7E43B3D15324569AA7EBB05 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A0043427A3E5D610ACCF9BF3E59DC0 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B680C2604BD8BC9644AE7C67BC46B9BB /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 5362B5CFE709D323C58661A555EA0FCD /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B71A05DF397B1283E7D92875312CE33E /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = A9911591AEF6DACD65669F35DE7FC796 /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B741DBE2A466E6211F879EF997D9322D /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B385616E29C56F1065D513D688A6A283 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B79864F972C51037B350802D8CD48024 /* LKS_GestureTargetActionsSearcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F3FAAEBE4DDBB114C36737DCBDCFC69 /* LKS_GestureTargetActionsSearcher.m */; }; + B7F81B5227042803A3624B81691C3310 /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = E8BC47795E8BC62C28A79D8137B783EE /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B81566F19789EBD9BE2714E2A6059D36 /* LookinDisplayItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C6B72DBBDF9038FC45B98590FFEBA8A8 /* LookinDisplayItem.m */; }; + B95C63A039D9D08896421291DEBD3AEB /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = C480A62A3336487BAE97082368E3258B /* SDWebImageCacheKeyFilter.m */; }; + BA69BB0EFCFBEA2CFC84289980390EBE /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F29DD5AEFE9E568F6ACA946F690CAA /* LOTLayerContainer.m */; }; + BA904ABA8ED36CC4E5EB2B2004CA1F18 /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 423011622DD8F81713938A78B5F61A57 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BACAA91A92F35CD7E7795232A83F21D1 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CF117705B5C8622EFAE4FD550C15E7A6 /* AFNetworkActivityIndicatorManager.m */; }; + BADA31750A2136D073EDA4461DBE1EEA /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 89A41D3BC17523C56CFFEC6FCAB76AB6 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBA61EF31BFDFA6FCA34DC4EBE6E1D9A /* NSString+Lookin.h in Headers */ = {isa = PBXBuildFile; fileRef = 45B1EBF9F1D58CCA30CB4004C23CAB1B /* NSString+Lookin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBACA13FFCF406ADE3AE808E582A0ACC /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 66B7F7ECFD89436FBF7A6FE70225F71E /* LOTRepeaterRenderer.m */; }; + BBF5FDA7D647517E2F904FE8E5596D96 /* LKS_AttrGroupsMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DCC1828515EB271D17EE801C6ADB75 /* LKS_AttrGroupsMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC2F9B1D6986FEB23B4FB1288B512538 /* MJRefreshNormalTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EADA717AC87F6036492553C299F466D /* MJRefreshNormalTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC5458210A973BC7A29D1F45D458A14B /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F3868A15C29AC79953551625F15DCFDC /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC7A1933CCF40C3C5E2E4A70AD2D0657 /* LookinDisplayItemDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B52EF67A97FD22FB044A97343A9B21A /* LookinDisplayItemDetail.m */; }; + BCDC1E1D46DD124B5726A064D2EE66A3 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5215F8336520B99C1610424CB483BF /* UIImage+MultiFormat.m */; }; + BCEFDE57BB0E0B36731C8D39FFA1BE2C /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = F9529A4CC737A0D21D97F97AF537442A /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD30193C1E3D7B1F17B1B1F3F08BE655 /* UICollectionViewLayout+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B0AB5F1118B885FC260AA61EFF770B2C /* UICollectionViewLayout+MJRefresh.m */; }; + BDBE494BAC544843982C3CA96A6C41DD /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2624C92BC8C5275C0312A5F15AB651 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF0C3D2782FE1425C2F1F8827132A94B /* MJFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BD06FE5E7BD6C03CE890911563EEF5E /* MJFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF170C7F6C8C81224D7FC668C7A43A37 /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EFC6C70CB4E71F532E78C711BCF271A /* LOTBezierPath.m */; }; + BF22D137EF6324675FA50080C5D93C00 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9FF485166EB3A70D8F8D26A6B653B1A /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BFAC671767912906E90060B0F4BED5FB /* LookinCustomAttrModification.h in Headers */ = {isa = PBXBuildFile; fileRef = 212D5F3CFC0D02910520EB36BD99D7F6 /* LookinCustomAttrModification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BFFE7A4B4D8020CF5672C5133D1F1CD9 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = C1A6BCD959F17DB2873035971D8D9032 /* LOTMaskContainer.m */; }; + C0D7926E41A294ACA98D7B033B283919 /* WKWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEDD7151481C270A240BCBD54C3BD7A /* WKWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1D9802BE2A6410FFDFB1650FB9BA317 /* LookinDisplayItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D10B29F985625FD8F32722DA7AB6548 /* LookinDisplayItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1DD8C6A64F948E4C53560C76B995DA4 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 42E528E57386958143E76DC7A69BD943 /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2033A68F13923BF9B3EE19F39FC1411 /* UIColor+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = EF918B26E800EA757410C452292BB16E /* UIColor+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2068AEACC2D9C7F1FFE41AA25B12A68 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B85CA0D358A6C59EF8B18ADABE1C975A /* MASUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2840BF1950FF7EE2DCD6D55F768A49C /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = AA8627134477274975DAC7EE73B5A16B /* UIImage+GIF.m */; }; C2F8C43CFD4C890405F217DA7E00C839 /* Pods-CustomKeyboard-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DDD0462C32F55EF5E9CB1056459809F /* Pods-CustomKeyboard-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2FE60A10C792613E45031AE6E851ECB /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = BBC10C6127599FC7CD74CA6E613C44DB /* MASViewConstraint.m */; }; - C4CC01ED368863C6E3220988FBC6CEFB /* LKS_CustomAttrSetterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F98B3E6FF4A7A436AEB00C4FE95820A2 /* LKS_CustomAttrSetterManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C60DB44F719853DE3B7157960DAF9270 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = EF2661A0DF69E1828AB8D83F666F4FBC /* MJRefreshComponent.m */; }; - C6A100159974349FEAAC99B82BE0F872 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 97003D4D841CDDF5214C70A6CC7425DF /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C6FEC1088121FEA7DDC3384B7ECF3B44 /* LKS_Helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 567AA7AB9514E985494C554A1802C03B /* LKS_Helper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2FE60A10C792613E45031AE6E851ECB /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = BAE2E0374B727874C33CF0DE8E025A3E /* MASViewConstraint.m */; }; + C42D63FF7758462B9ED5BB5A4F179ED4 /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5B6B55042DB42F252D42C32640C375 /* LOTFillRenderer.m */; }; + C4857A1AC7FD3DEC64A3317D83BFB303 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A97DA96A702C328BF01C96399051B6 /* LOTComposition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C4CC01ED368863C6E3220988FBC6CEFB /* LKS_CustomAttrSetterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 253F01264DD6A7D63DB8CC1D7D744996 /* LKS_CustomAttrSetterManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C60DB44F719853DE3B7157960DAF9270 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 565EF00A28E7DFCAFB6E2DCC81FBDE7C /* MJRefreshComponent.m */; }; + C66915E06137FEAD1548286F1166967E /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F37F51FAFA6702910C4E7E1D2616BB /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C6757D4E3CD09BF8CC6F623B4CC11202 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B04AA19A4116D82F80C002622150160 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C678DCBD7362D41A593582C0624C26A9 /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 09A26F9A95E56A246619BCFD34149214 /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C6A100159974349FEAAC99B82BE0F872 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0F813082650C5F50C1BD1187BB78807 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C6FEC1088121FEA7DDC3384B7ECF3B44 /* LKS_Helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 23EC829A73BE2C983F20E677FDCE58A3 /* LKS_Helper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C705FF253BD1A8573048C783E1632B34 /* LOTCacheProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 90323AA1DFBAF5BFB10D27B9FABC4094 /* LOTCacheProvider.m */; }; C71935C30C1AEDF32B96670BD8FA64CE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1DF8BF780A4AD9606856AB857CA1D86 /* UIKit.framework */; }; - C857B8D2D0BAA5A8A764F9E1C4B85807 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 904AEE3BB6B326E7E1CFD8B0A34306AB /* ViewController+MASAdditions.m */; }; - C8771885BEA9EA0BD2E2C474587325E2 /* LKS_ExportManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A306B5D1B1BD0232E2121BA1E0EA27F9 /* LKS_ExportManager.m */; }; - C8EC35DFB0945DBE2F2FF9ECFE6D9711 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E64D1052C3FD60EB6BBB8A95EE1349 /* NSLayoutConstraint+MASDebugAdditions.m */; }; - C93E972E75F84674690300123984EC43 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D7966DEA2CA0101B9FC2C01A1A2909B /* SDAssociatedObject.m */; }; - C992A335399F942237E754EE65C40CA5 /* LookinObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E70A8D54BBD1266CC7CAFB4BD5CE317B /* LookinObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C993A4D0CFA51E567F458CA65C1298AA /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D219431FF998A6D0FA270965A4CDE56D /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9B63C6ED2ED691EA83D3EE65939444B /* Lookin_PTProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 1550F0B5EA5360BFA35606256AB6EF51 /* Lookin_PTProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9E19D164C26414115CC969ED9A303C1 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE5F5B6D6DAD0B45FC2D30EE6FBEE81 /* MASLayoutConstraint.m */; }; - C9E8C9372C2DA29D302B058BE3AE9877 /* CALayer+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 26476CAEC54A4CE04264494F816DFD2C /* CALayer+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA1E0DCDF679EA2DE2ED0915426E1D04 /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD58163B84A00F8FD88E21AE9F6DF12 /* SDWeakProxy.m */; }; - CA56274BE7CBB3E759E0364785DF9799 /* Lookin_PTChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 341D877992B274AC6FD93AB03542E561 /* Lookin_PTChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE86196C00DC1D658B6CB7D47A0233AA /* LKS_ConnectionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 613D22FE29FDFD98F1BA3415B19FB040 /* LKS_ConnectionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CFF8D1A5E4C2097EF05E1021FE112886 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 54354678DA42B275327F1EABDD57F9BD /* SDWebImageIndicator.m */; }; - D06BB547D59D183FD1DDD84DEBAC9EE8 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 42189E436FCC0F9F0BAA536F3BF84910 /* SDWebImageCacheSerializer.m */; }; - D091F05269EE0566B665B00C7D912F8E /* Lookin_PTChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 93AFD572FFECC065D5DF0E8764C35B66 /* Lookin_PTChannel.m */; }; - D1230E19DD1507E6370B80DF6653AC2A /* NSArray+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 49A24CBDEFCE6B22E2D355C6D04AC9B4 /* NSArray+Lookin.m */; }; - D2AF9A7FD73B95960FDA4FD06C4BED08 /* NSObject+MJKeyValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5210B0534D834B2EF86FDFCE90B73F2D /* NSObject+MJKeyValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2CD8848F856EC9942A76610AAE66F0A /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B00A278D1C0A05DD872C02CEFE3B53AC /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D559CC4D0695CEE05F3B4C1C06475044 /* UIImageView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CAEA0BC49D62C0D220FA986A5391EEC /* UIImageView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5C046C46961BE465293625D6B870620 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A4CDCDF549B87D4E437ED8A4615D91 /* AFNetworking-dummy.m */; }; - D62A672EEB252581BD972DDA862BE1DD /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 037A3F50C10BD2A3B9D2C3743608A737 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D662C83ECE8BEDA5FFB52F3575CA3E1A /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 34206822AA40B77DF3E1B3B5D326158F /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C7ADD8EB5C9D708ECEA2C390240A16D8 /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 94F61108FDF5859A2E8AA134032032C0 /* LOTTrimPathNode.m */; }; + C857B8D2D0BAA5A8A764F9E1C4B85807 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1955F41E0706379EF05FC01843BA8921 /* ViewController+MASAdditions.m */; }; + C8771885BEA9EA0BD2E2C474587325E2 /* LKS_ExportManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D37041B11126460A8298FAD460FE0AB7 /* LKS_ExportManager.m */; }; + C8EC35DFB0945DBE2F2FF9ECFE6D9711 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 67E45B07A8C73D258BC721F9424D2BEB /* NSLayoutConstraint+MASDebugAdditions.m */; }; + C93E972E75F84674690300123984EC43 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CC07D0B98910CAEB51550360AEBE2927 /* SDAssociatedObject.m */; }; + C992A335399F942237E754EE65C40CA5 /* LookinObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DAE2D8D9C2E257F951F15C3DA77323B /* LookinObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C993A4D0CFA51E567F458CA65C1298AA /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F44212B79C8F78B7273626290DCFE4CF /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9B39B6EEDBA0B2AE31F33FC2C06CE46 /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C4549821E4DC5B1FB23405A2A40518 /* NSValue+Compat.m */; }; + C9B63C6ED2ED691EA83D3EE65939444B /* Lookin_PTProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = E0BA4270627AD3D7F7A5BAAAD7FE8936 /* Lookin_PTProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9E19D164C26414115CC969ED9A303C1 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 09ADD98E6845BBE361C99DDB730B1A04 /* MASLayoutConstraint.m */; }; + C9E8C9372C2DA29D302B058BE3AE9877 /* CALayer+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8601131B7C9DA6CD3E47B8DE1ABBF3A0 /* CALayer+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA0D281C34C14862007C11E25C5B9A5F /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = EE87085572BA96EB92603E1A53A0E960 /* LOTShapeGroup.m */; }; + CA1E0DCDF679EA2DE2ED0915426E1D04 /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 88797777ADDC62A67F19032A2211713C /* SDWeakProxy.m */; }; + CA56274BE7CBB3E759E0364785DF9799 /* Lookin_PTChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = CE5098EE32D614C707923B531CDDE7D7 /* Lookin_PTChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBFCE4E0A58E61AF87B64990B684E63C /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = ED44958C71D2C6D449D720D22E09F669 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CDE3764656628A6725A23485D09EBCB2 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 38B5EB5EDEA91AF4FC11989687A8FAB0 /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE6655231AA31E81F892BF128A3F69C5 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D163A736430857CD6723C0B841B086F /* LOTAnimationView.m */; }; + CE86196C00DC1D658B6CB7D47A0233AA /* LKS_ConnectionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0055A793E4CA7BC665FB8D71AB9FA0 /* LKS_ConnectionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEB72739300F5625A20133D701DEA206 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 14EF04750B2EB7A7F73D729913572ACC /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF0DD3F5386ED73063CD3A703391B91D /* LOTRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = EF103610E3EA9CE9AD51BD469212581F /* LOTRadialGradientLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CFF8D1A5E4C2097EF05E1021FE112886 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = C26AFD39A6FD75465E81A0AE96EC820C /* SDWebImageIndicator.m */; }; + D06BB547D59D183FD1DDD84DEBAC9EE8 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D7F51642DDCF1DC83B98FDD221BF1B7 /* SDWebImageCacheSerializer.m */; }; + D091F05269EE0566B665B00C7D912F8E /* Lookin_PTChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BBB67CB5AF9CFAB277F233EE23E2A9B /* Lookin_PTChannel.m */; }; + D1230E19DD1507E6370B80DF6653AC2A /* NSArray+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = 162D928CE2A089AEA1EF3CC1D765F0A6 /* NSArray+Lookin.m */; }; + D16F2BBDE5439D6EB76B758BF3664233 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 18DC9B08E606765DE6D26A767B58AD1A /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2AF9A7FD73B95960FDA4FD06C4BED08 /* NSObject+MJKeyValue.h in Headers */ = {isa = PBXBuildFile; fileRef = D98BB3CC68B7C3491A9F70BC923DB26B /* NSObject+MJKeyValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D2CD8848F856EC9942A76610AAE66F0A /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B1F343292441688F2BC2B256FC2201BC /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D2DBC1B19438A9B9EF72764BE7934312 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; + D559CC4D0695CEE05F3B4C1C06475044 /* UIImageView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = DF190E43FFDCD29D99703A05F818C76C /* UIImageView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D5C046C46961BE465293625D6B870620 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6362C2F0D448F7CF1E20C133D2F2911F /* AFNetworking-dummy.m */; }; + D62A672EEB252581BD972DDA862BE1DD /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F139A935EDC4C35FBD6F43FD93C0E27 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D662C83ECE8BEDA5FFB52F3575CA3E1A /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CE264DED17C3E3E1051842B8EE95B875 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; D663837F4347AF58660EE6F7FD426ECE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - D788BA4B9E8186271BA75CA52B30502C /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 59AE847A100A8834951E42690C982455 /* View+MASAdditions.m */; }; - D7B3E8948DB04BD8FB6748419DA03EA9 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 241065D9A03A30BC61C328A01C40E560 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D89C7D5455E3E8E2D7EC6B880253BD9B /* LookinIvarTrace.m in Sources */ = {isa = PBXBuildFile; fileRef = 872090FEDB94946E441D4F936A1357C0 /* LookinIvarTrace.m */; }; - D90607B4E56247B19B14462E487BA86E /* MJRefreshNormalTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = E25013592494E49EB3F378AA4A68FB7A /* MJRefreshNormalTrailer.m */; }; - D90DED0F5638B1C44F4B6C62D600D240 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 120B89B8756AC54266917A34CDCADBB2 /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D90DF1376DF5E2EA644313BCD2E03058 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 352F463EFB3454F98E285A844376EC28 /* MJRefresh.bundle */; }; + D788BA4B9E8186271BA75CA52B30502C /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7409B8F68BB7F5FE38B11EB1CCB824F7 /* View+MASAdditions.m */; }; + D7B3E8948DB04BD8FB6748419DA03EA9 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 20E3D5F73805D1354BC5705A581B7310 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D89C7D5455E3E8E2D7EC6B880253BD9B /* LookinIvarTrace.m in Sources */ = {isa = PBXBuildFile; fileRef = DAAFD65A8B40888BCD17923AC9C82911 /* LookinIvarTrace.m */; }; + D8A81E8A20713CA067A7C3F698BE25BA /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = F80F6E8D3E01737C266F7948E2E99D41 /* PrivacyInfo.xcprivacy */; }; + D90607B4E56247B19B14462E487BA86E /* MJRefreshNormalTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EAE4315E539C1E8519CCCC290820AEC /* MJRefreshNormalTrailer.m */; }; + D90DED0F5638B1C44F4B6C62D600D240 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = B5C7A1209E91236FDFD8AE69DE80B5FD /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D90DF1376DF5E2EA644313BCD2E03058 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 61FFF7A27CE20B4852E6656680890667 /* MJRefresh.bundle */; }; D968461E31E8FF3FF6BA1DC621B0433B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1DF8BF780A4AD9606856AB857CA1D86 /* UIKit.framework */; }; - DBA9500CBBA5FF6FCBBA115AE4D12152 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A62C9B59CFA9D74EE95F526BE485EC8 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBD9152526A180771BF7D7CD209B957E /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F61B84FD6B8249C85FCBF56257E34C6 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD7F63D4E4640C7386877BB787740272 /* LookinServer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A8FD671105727BDE389DF6E59E7187 /* LookinServer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDA16FB9C21AD941442357DAE6939530 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E727648E6DB0C84B6B5C85D16CF9D6AC /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE5A78F116018E2AC54714238276574D /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 15E423D2DE3EB3895273EDB5BC21FDE9 /* UIActivityIndicatorView+AFNetworking.m */; }; - DE98ECCCA7106A4EA575EF34830D41FF /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D47A5312A106ED050240FD5A4E84CE4 /* MJRefresh-dummy.m */; }; - DEA09692CF813A23899CD4949A9B6801 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 33E548EC20D55A1581EF030D8F590720 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DED9ADFC8CC65243FC54E008A853742C /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F39E9FDE611BCC2A514A77F1EB63E8B /* MJPropertyKey.m */; }; - DF2B15402CE105F5A8CE48BBDCFFD5DD /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = F57A932DBB8EE96EEDB42899B11A3E40 /* MASConstraint.m */; }; - DF525E5405FAD3B98B0C2D966EB2DD95 /* UIViewController+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AF7E49BBE304E0327E319036BE5671B /* UIViewController+LookinServer.m */; }; - E0B48B9D5D45AF3500FC718459D66E6C /* LookinDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E6089EEBB83334AD3EFA96BE408F86D /* LookinDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0BCF21E9FA59F638C13ECCECC4D9690 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D0E9B54F4868B1B1BDE17140B78250 /* SDMemoryCache.m */; }; - E1BF615DD0422B06C97542F03C879D41 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 743C4A42055B7373FB20F646193D0919 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1DE69F6BB6235A6EDB6C99A184BEDB4 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = F61E20013C3B1EBDF05023CF2525C38C /* UIScrollView+MJExtension.m */; }; - E3FC6BEE41652C0500F57E0CB83B347F /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 35182E600B80DDDFBA4A4B90FAA71EFD /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4F1B478580D6D7328BC29607BDE46F6 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 71BB52034FF7403843EE79E4975D6D70 /* UIImage+ExtendedCacheData.m */; }; - E50613C67DD02AF6EA825DA0B31EFFAD /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = ED6C24AA261BA4AFA4E02DA1EFA44065 /* SDImageGraphics.m */; }; - E55B3151D86660E28CEABC3CDE6B1508 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D93B5DFF8656FC20174F5CDCB325540 /* UIButton+AFNetworking.m */; }; - E5B057BC87284367918B2DB9CA084B4E /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E49D88BA109001AA94CB4B1CBCC6353 /* MJRefreshAutoGifFooter.m */; }; - E76969F9B01139118427505B18F9CD21 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 67A65AF14731E6A6CF631892AB163C2D /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7FEAB9F421F7EBAF021F792D8E9C4D6 /* LookinCustomDisplayItemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C5B4FB13625B33C4ABB17DDEF05C782 /* LookinCustomDisplayItemInfo.m */; }; - E82964ED7092CDCDAD08BC596A57B43A /* UIImage+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 241D729CBB4E30C3E09474F7F34CB9FA /* UIImage+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E8AB529B9E0B4C23921344F6C4ABFEA4 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F12865FFC70E396EDFB92C4A7F13D7 /* SDImageCoder.m */; }; - E930A5612DC6D120BE040AD17C6D1BCD /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 07F0D69559BBD9895C4D0BD66F33AC55 /* MASViewAttribute.m */; }; - EA82B6D97C9C5D0558047AF552D63203 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 01E24F0E64AEC0E54DBDB063CE89097A /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBA9500CBBA5FF6FCBBA115AE4D12152 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 60CEAD00694E0294FFC1464C9E470990 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBD9152526A180771BF7D7CD209B957E /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = A04258711352429161416B5AB0683EFF /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD7F63D4E4640C7386877BB787740272 /* LookinServer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F0FA893227558088DD8B6F6B81EC898B /* LookinServer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDA16FB9C21AD941442357DAE6939530 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 90CFBF9235075408C904B6DABEEA2F13 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE5A78F116018E2AC54714238276574D /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8240D78E227CF08269208266B359856 /* UIActivityIndicatorView+AFNetworking.m */; }; + DE98ECCCA7106A4EA575EF34830D41FF /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 58EEF31E4381FCF9901BC539FC8B3664 /* MJRefresh-dummy.m */; }; + DEA09692CF813A23899CD4949A9B6801 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 985A0647BFFC83000EDF42EB612CDA60 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DED9ADFC8CC65243FC54E008A853742C /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 21D0C6357BF8326FF0066E3513EEA5BC /* MJPropertyKey.m */; }; + DF1476A560849021823652A999FE5E53 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = D34846EAAF5506AE63C9A854D5FDF774 /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF2B15402CE105F5A8CE48BBDCFFD5DD /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = ECEC7FFD61060DE487BE317D1D173EA7 /* MASConstraint.m */; }; + DF525E5405FAD3B98B0C2D966EB2DD95 /* UIViewController+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D9CFD7E8C81DF76A90E065320570722 /* UIViewController+LookinServer.m */; }; + E0B48B9D5D45AF3500FC718459D66E6C /* LookinDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 36F0FA6F6A2819FD3BB42BAF0CC428F9 /* LookinDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E0BCF21E9FA59F638C13ECCECC4D9690 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4552D8C330B0C2C1287281C74A75D135 /* SDMemoryCache.m */; }; + E1BF615DD0422B06C97542F03C879D41 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 7244AF642E95CDEB080A67821F491AB7 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E1DE69F6BB6235A6EDB6C99A184BEDB4 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AFA5B0B1A9EF84657670C7FAC7A9F2 /* UIScrollView+MJExtension.m */; }; + E3DF4A8FC9BFA0AB9E945872E6360F93 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6B5378102B2D099A0AA567282D5FB3E1 /* PrivacyInfo.xcprivacy */; }; + E3FC6BEE41652C0500F57E0CB83B347F /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D7657C6F513810FF5028EF3C8B02968D /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4F1B478580D6D7328BC29607BDE46F6 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C477F73C90FE2DF3612D030B50B3838 /* UIImage+ExtendedCacheData.m */; }; + E50613C67DD02AF6EA825DA0B31EFFAD /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 237831FD808D45AA5DB8412C1BA57713 /* SDImageGraphics.m */; }; + E55B3151D86660E28CEABC3CDE6B1508 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 08333FE8538C0478DED633658959E47F /* UIButton+AFNetworking.m */; }; + E5B057BC87284367918B2DB9CA084B4E /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F0A1F567AF929A141BB507491CE4DCD /* MJRefreshAutoGifFooter.m */; }; + E696B17E5E67AF3D3CE659B17DD30EA7 /* LOTCacheProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 88295EA244124CB418613B6CA605F1DE /* LOTCacheProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E76969F9B01139118427505B18F9CD21 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 94C47D37BDA5FFB3958DA8A59A74D82A /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E7BF76944D34CFE29590086B1CC1CE9B /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A820A148846D1DD18FFC9902C96CD5C /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E7FEAB9F421F7EBAF021F792D8E9C4D6 /* LookinCustomDisplayItemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8574AAF25AF7B49D29319C3DCFE58E9C /* LookinCustomDisplayItemInfo.m */; }; + E8249FE30F9FCBB3ECB9FF5F77AD549F /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94E892DBBFF37C0D4E5768CBB0E4F36E /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E82964ED7092CDCDAD08BC596A57B43A /* UIImage+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A9D834D1A902531DB9016EC9D1C032 /* UIImage+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E83D81700EFA8F27D5B883B412CBEB4B /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD861249B9D25E9864236D2DFDC4D44 /* UIColor.m */; }; + E8AB529B9E0B4C23921344F6C4ABFEA4 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = AE794049E484CC97781712EC9E88926F /* SDImageCoder.m */; }; + E930A5612DC6D120BE040AD17C6D1BCD /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D2735AE63774D5D2365CAE4C9E270E8 /* MASViewAttribute.m */; }; + EA82B6D97C9C5D0558047AF552D63203 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E5B849C455471BCDB623C61F8C9A5C6 /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; EABCB60A26B06BF576E50BBD2F89A385 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; - EB3DF628891F7D6AB114718AF760CB2A /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 319E8C485C3E5DB2BFBF15AA61E5ABA9 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB646114ABEA7A4D6C2A724404778670 /* LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 30A10CFE082F8338A031688B47CDED17 /* LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBC9AA5D4A55F79BB5CBF6CC92719FAF /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B9232C2E4F4A27C4FBD3F8EA3E351AF5 /* PrivacyInfo.xcprivacy */; }; - EC8E84A8FFADDCA562A8608D141D9027 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = C79FFC2722DEE9A1F54D8DBDD3CB2A2C /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EC9B34262AED632D7EFB49804337648E /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = B069597AD0812CBF01ACDD3CE4B6F843 /* Masonry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECE64B732F9FA7C402DDEEC58DCB9D98 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = F6908A3C9CC8A527E2C3CB20A2C51560 /* SDImageAPNGCoder.m */; }; - ED8991A8AE7C04362C2BED3875DC1656 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 05D83C1EC3DD8D27EE1C07CFDE18D72E /* AFURLResponseSerialization.m */; }; - ED8F64FF98CFAE0B12CF60A1B0E6BAF8 /* SDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 19F3928D9276C0125AA1EBDB31A470E1 /* SDCallbackQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE6E8FE636D2C02E3D2FC1E8555B4612 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5932D997195DFCB258D366D038A56978 /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EED016DE8173CD38CC01D88CD2628984 /* NSString+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4D3A8A4AF29616DFF2E40A94DA00AE /* NSString+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EF6A6C725598F572A70C5FCEE328C184 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = BD3AE781F5CE5DD3063848F6F78DD40B /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1D845E22D5B8FC6AFC3C2E41DA1B6DF /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 62E02B7B42A91CD6887912774FAE6528 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2AD91050B1FE3C8BC78567F1FDE3ED5 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D6C729EB2C2561DF46F90B1EE029B4 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2C9F9038FBEFD951516694AE873A2B9 /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D069519EE909290F7C452231691CA88 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3263D294D688533EB974E37C61F1E24 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE109BED042388EE5FB3949ADA18281 /* MJExtensionConst.m */; }; - F3AECEF6D3BB919B3E7392942E1BC58B /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = AB22EEA7E251269666B0DD8D3FCD0892 /* MJRefreshBackFooter.m */; }; - F3F4A6309BD95DFAA4DCC60A4E07C515 /* UITableView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7584B9C7664B986D7C6582FD3280C473 /* UITableView+LookinServer.m */; }; - F49CB22863CCFEC7817D259F27F91C57 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D81E3EC47029DCA820DF6AA652C734 /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F53BE4449AE5896F76325E4DCB6D0B13 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 99F9CF6DCFC4C32DE7AC87FA68FD05DA /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F60F90EAF35CFF40DF1C33557965787D /* MJRefreshStateTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DDB2F652BC38BC05396DCC9F34040CD /* MJRefreshStateTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F62B0711DA506CCB3DF79F65134566C7 /* Lookin_PTPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D703CF356A8E2B3B3665722366223A5 /* Lookin_PTPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F68889CD481716EE5D6B75EBD8FD53A6 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5518BA3449B11DB02406C2A9A9AA75 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6A0D6EA1B5DC3FE04DC4A1B0A914121 /* UIView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 12119FD9C09B77E5C8A003238C89E88A /* UIView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6A2DEEA8E8B92D365AFDDBD5E8C1218 /* NSObject+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = BA48F14A970C2FE9AE9B9A3F4EF27D84 /* NSObject+Lookin.m */; }; - F6D1C960368EB1E067ABD0BFF707FC56 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D891833337A0E2AFA0DBB31899C747F /* MASConstraintMaker.m */; }; - F7623E7C314AA5010D8D0BD6ED4AAAD4 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = A67D546CB537E231FE83AA071A555BB7 /* AFImageDownloader.m */; }; - F8616FAFEE1124368CB96473CE20CDB4 /* LookinAttrIdentifiers.m in Sources */ = {isa = PBXBuildFile; fileRef = 75E99E8BA24E841D85C9E942E3654D62 /* LookinAttrIdentifiers.m */; }; - F8F1B1196CAA5114BA9A95AA7E6D6AEB /* UIBlurEffect+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = D950E8533947A1D8B1CABC80463AFF52 /* UIBlurEffect+LookinServer.m */; }; - F9789D86D3279D71B398B550F27C3EFF /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 34294BB6B51E74AFE5298D85D957E2F6 /* AFSecurityPolicy.m */; }; - FA3021DED76B9B182CC9195A60EB1209 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BAD239072CC7DFB1FD50FE4374085D1 /* NSBezierPath+SDRoundedCorners.m */; }; - FA6DA93357E2E9E9AADDFB3E39DEB6C2 /* NSObject+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = E66FFAE76E02A3342AF857261F059F70 /* NSObject+LookinServer.m */; }; - FCDEC6A53CF5517E1AF5B331FD65F6D9 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4770EEEC71445F1C55A5C71E32517009 /* SDImageCacheConfig.m */; }; - FCEE5BD645E95FF55468C4AB6D17CFDA /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F0BE45EAE3F2E6B703C484173BD9CDAD /* UIImageView+HighlightedWebCache.m */; }; - FDACBA49610EA6F39CABB7FE44B137D1 /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = D3C9902E0E2D0A78C2A349E20322FC80 /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE07C069C2E3543002CEB5D751ABA9AC /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D18C326A9F4C285AD294832344E63FF /* AFNetworkReachabilityManager.m */; }; - FEA8BA4F82CCBD1D28DCC7EF39FB4096 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = C839ECCA7B6B8EF19AFC3658241117C8 /* SDImageCacheDefine.m */; }; - FEE883575278D5BE8F185437AB5DB3BB /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F0234E8EBBDCA694F549267CF8444C2 /* MJRefreshGifHeader.m */; }; - FFC6D50089FA32FD7AAF25747E56EA60 /* LKS_CustomAttrGroupsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 667106A3B29FC2624F444E79272C8235 /* LKS_CustomAttrGroupsMaker.m */; }; + EB3DF628891F7D6AB114718AF760CB2A /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 838A50D9CDFF91A2855B40D1F8A5BE69 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB646114ABEA7A4D6C2A724404778670 /* LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EA6FE188B790C5187D388E7DBF4903B /* LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC09CB1455EC2C7F381E7FAA4563E5A5 /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C17150924CE83F6BA6F1FD6145F7215 /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC8E84A8FFADDCA562A8608D141D9027 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 60F506657CC6F4A87CB4CC4065096FF6 /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC9B34262AED632D7EFB49804337648E /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = 038BE638009D15FEBC743BF8C2341362 /* Masonry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ECE64B732F9FA7C402DDEEC58DCB9D98 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BED92A4C73248A5D1906171ED32A63C /* SDImageAPNGCoder.m */; }; + ED8991A8AE7C04362C2BED3875DC1656 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 3749B43BEC208D26F5E83E6A22AE3271 /* AFURLResponseSerialization.m */; }; + ED8F64FF98CFAE0B12CF60A1B0E6BAF8 /* SDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B154036337A385D90E39DDEB774F2198 /* SDCallbackQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE6E8FE636D2C02E3D2FC1E8555B4612 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D2C5101C8A6382A6CB5C288F83A8E0A /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EED016DE8173CD38CC01D88CD2628984 /* NSString+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = A7253D6026271401CA5BD4DBA6B8D210 /* NSString+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF6A6C725598F572A70C5FCEE328C184 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = ECD9216B7DC2A2AF3E77EC7E99E8C8A0 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F061785B349C67B1EFC3FC98EE7D70B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3964617E5C241BE3E12D8F1D88607841 /* Foundation.framework */; }; + F1D845E22D5B8FC6AFC3C2E41DA1B6DF /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 32A9453657A00F96F67E70F7AC7A0F7A /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F24B35D5D8C959EDB299EE9DA3ECF375 /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DD68ECDF497DD8B434F9C7E5B170807B /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F2AD91050B1FE3C8BC78567F1FDE3ED5 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 880F12A72861E33FF3013769CFE1A574 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2C9F9038FBEFD951516694AE873A2B9 /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 70DFCCB3FF2EEC2229AB04428D470CAA /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3263D294D688533EB974E37C61F1E24 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E874E62C2BEEB18D79F53EB63CB7B65 /* MJExtensionConst.m */; }; + F3AECEF6D3BB919B3E7392942E1BC58B /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B692DF0DBDC1936CDAE65738E9975D /* MJRefreshBackFooter.m */; }; + F3F4A6309BD95DFAA4DCC60A4E07C515 /* UITableView+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EEF77D3BCC85A25B03E04A84BF16D7 /* UITableView+LookinServer.m */; }; + F49CB22863CCFEC7817D259F27F91C57 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 092146456740DF65E5EAA20611C7D901 /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F53BE4449AE5896F76325E4DCB6D0B13 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F700FF1F501E4E31BEDFD51001DC1382 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F548C5CC8DF15FF0156F403FA215A402 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = E6D32A1FBB11D18DDF0B3E5E4975F7F7 /* LOTCircleAnimator.m */; }; + F568FAD54619C3EDCDD9E12558E310C0 /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = F5686BE73395FF06B0A656EB2392ACC0 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F60F90EAF35CFF40DF1C33557965787D /* MJRefreshStateTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = D5C249C27473B9D78B0AF5AA0AFA0CEA /* MJRefreshStateTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F614312EC3EC21EBCCDCDCD0CA6CD3DD /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C510DEA5D159BE22C03E3316356C514 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F62B0711DA506CCB3DF79F65134566C7 /* Lookin_PTPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 54257FD1D30854784D73CB9C2606B617 /* Lookin_PTPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F68889CD481716EE5D6B75EBD8FD53A6 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 893CA99CE68216B41DFA983109088F17 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6A0D6EA1B5DC3FE04DC4A1B0A914121 /* UIView+LookinServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 850B2C6C14EBC6E789298096BEF91F35 /* UIView+LookinServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6A2DEEA8E8B92D365AFDDBD5E8C1218 /* NSObject+Lookin.m in Sources */ = {isa = PBXBuildFile; fileRef = ECA0DA9391C203431B6208348838B1C9 /* NSObject+Lookin.m */; }; + F6D1C960368EB1E067ABD0BFF707FC56 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9986D42F8471D0820048BA27C40B1B0E /* MASConstraintMaker.m */; }; + F7623E7C314AA5010D8D0BD6ED4AAAD4 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 28C700888F633E86E1D8FA3945E75225 /* AFImageDownloader.m */; }; + F8616FAFEE1124368CB96473CE20CDB4 /* LookinAttrIdentifiers.m in Sources */ = {isa = PBXBuildFile; fileRef = 29FD2B9A63329EFCBCA88572F71055A7 /* LookinAttrIdentifiers.m */; }; + F8F1B1196CAA5114BA9A95AA7E6D6AEB /* UIBlurEffect+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F2CD5591B9920DFEE95E0D02CD7172B /* UIBlurEffect+LookinServer.m */; }; + F9789D86D3279D71B398B550F27C3EFF /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6664F841DDF71FD7E0381AFD23B988B4 /* AFSecurityPolicy.m */; }; + FA3021DED76B9B182CC9195A60EB1209 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 260216431024153F0424A4A48619E4A6 /* NSBezierPath+SDRoundedCorners.m */; }; + FA6DA93357E2E9E9AADDFB3E39DEB6C2 /* NSObject+LookinServer.m in Sources */ = {isa = PBXBuildFile; fileRef = C09E0CE1DFC8AA872B05145C3E28A091 /* NSObject+LookinServer.m */; }; + FBBDE0C9C47BE5882C56BAC0CCD6EC2E /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ADAD78200CCA86416BFF6F3CD3186B5 /* LOTArrayInterpolator.m */; }; + FCDEC6A53CF5517E1AF5B331FD65F6D9 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 593DA693160BD486D8A2B4A95A6508B9 /* SDImageCacheConfig.m */; }; + FCEE5BD645E95FF55468C4AB6D17CFDA /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F58011C4A837239A4C52F123400CF34B /* UIImageView+HighlightedWebCache.m */; }; + FD975E47AB4881874E8582FB16450F47 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = F6CACAA41BF0E1D35C324D39ED2A0702 /* LOTGradientFillRender.m */; }; + FDACBA49610EA6F39CABB7FE44B137D1 /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = DABD10BFDD200E2871D007BE2C1509CA /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE07C069C2E3543002CEB5D751ABA9AC /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1485A77C75A87C3D9C35F8002931EE32 /* AFNetworkReachabilityManager.m */; }; + FEA8BA4F82CCBD1D28DCC7EF39FB4096 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = B7FCB1383A96738408BB53DBC0FAC4EE /* SDImageCacheDefine.m */; }; + FED6FF7B8976AF055D1B958627C5B6FE /* LOTRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E07F0A51623D562E50DD3FBE8698C739 /* LOTRadialGradientLayer.m */; }; + FEE883575278D5BE8F185437AB5DB3BB /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 115C3E9007751CB9170B5BD6B88B296C /* MJRefreshGifHeader.m */; }; + FF3F01AE0874C09BE302D9D7DC36A120 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 98E804E7DBEDB67735C5EE9E4C401019 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FFC6D50089FA32FD7AAF25747E56EA60 /* LKS_CustomAttrGroupsMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = EBC38AEFD95B5A6302BE5AA3405EC1FE /* LKS_CustomAttrGroupsMaker.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 17A6BBBD906DDCB7334A02B16B07B4DB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; - remoteInfo = MJExtension; - }; - 17AC289E8A24B84DB147B7977008DB53 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; - remoteInfo = AFNetworking; - }; - 1CC061C6A0CA52E13056E44543CDE4BD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; - remoteInfo = Masonry; - }; - 551922F754B651AFCAAB56605458A1A4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; - remoteInfo = Masonry; - }; - 6610EBAD645971628D6E656F2A7FB551 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8; - remoteInfo = MJRefresh; - }; - 7D22DC5F48A287865357EE41131C6668 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 638FEAAFC575BB76BC6AC055CDDA3506; - remoteInfo = LookinServer; - }; - 8C2E663FC9840B2B7BABEF079AD58862 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 94CFBA7D633ECA58DF85C327B035E6A3; - remoteInfo = "SDWebImage-SDWebImage"; - }; - A311284721E0C3165FAA791C3EE6961E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 82B0A41D3031FF27D78E17B0A9A46FB0; - remoteInfo = MBProgressHUD; - }; - AD74DB90134D3DB33FAC2C873C0764E9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; - remoteInfo = MJExtension; - }; - B0F47C29852712CF2F2C1E658ECD1809 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F1BCD9702276377FB5B3BDB6EAF709D7; - remoteInfo = DZNEmptyDataSet; - }; - BBBA8C59A31486B3AE2F16C6A4AAAB66 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B26054DF1DEA11585A231AF6D1D80D5E; - remoteInfo = "MJRefresh-MJRefresh.Privacy"; - }; - C85024A705A5032AA3907BF36C187CEA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4A68CFD979D413A619DF631BB121D98F; - remoteInfo = Bugly; - }; - D8B3BBDA3C526A079F33D20BFE81FDA0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F1BCD9702276377FB5B3BDB6EAF709D7; - remoteInfo = DZNEmptyDataSet; - }; - F295793354A8BF65125212DAE1C81DF5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; - }; - F34B1D580EA71604D4CC7C4C5807E366 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; - remoteInfo = AFNetworking; - }; - F4000FEC7CADA56B75E5CC31E64EC891 /* PBXContainerItemProxy */ = { + 05E37D87694B2835067E947D2A500B57 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = B32AF3F43989CBA171BB1FB3957A4509; remoteInfo = "MJExtension-MJExtension"; }; - F9524D7CD6D352CCF289944EBCA3B3FB /* PBXContainerItemProxy */ = { + 0ABCD8F19156F595E97A263B13CE6088 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 136FDD82F26C77E0886BF3ECAE2ADFC9; + remoteInfo = "lottie-ios-Lottie"; + }; + 523F84A7E8BDE089117809BBE36C02AE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F1BCD9702276377FB5B3BDB6EAF709D7; + remoteInfo = DZNEmptyDataSet; + }; + 65E2ABBE344510E7F51814545840D00C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; + remoteInfo = AFNetworking; + }; + 687911F6B6BB070C2225167D056638F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 82B0A41D3031FF27D78E17B0A9A46FB0; remoteInfo = MBProgressHUD; }; + 68E269B496C8198FE971D3BCCB68A317 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4A68CFD979D413A619DF631BB121D98F; + remoteInfo = Bugly; + }; + 97A15C213F33B1D119B61F6A45EAEF4E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 94CFBA7D633ECA58DF85C327B035E6A3; + remoteInfo = "SDWebImage-SDWebImage"; + }; + 98811BF28BBE44E4EC5DE002C8E480A6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; + }; + 99624177089035CF7C18F78DCA46954D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8; + remoteInfo = MJRefresh; + }; + AAB9841D6B0644068394C00CB2265530 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; + remoteInfo = Masonry; + }; + AEB3C734FCFD8DC82E64778F1DBF3236 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0B967D7F8561D42493EE289EC8D450D1; + remoteInfo = "lottie-ios"; + }; + C465864A640933164C0AE9D72B0C09D0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; + remoteInfo = MJExtension; + }; + C7749D52C280676AB7E0DC7782B74CBD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F1BCD9702276377FB5B3BDB6EAF709D7; + remoteInfo = DZNEmptyDataSet; + }; + D0AD631EE2F52B5410362CD80521FFE4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 82B0A41D3031FF27D78E17B0A9A46FB0; + remoteInfo = MBProgressHUD; + }; + D66CD0A7C341B08C9A4D1DE4055855B3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; + remoteInfo = AFNetworking; + }; + DFCFD249D65F76523788B07416599903 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 638FEAAFC575BB76BC6AC055CDDA3506; + remoteInfo = LookinServer; + }; + E72DD65F300460D9DE59CE34AE3C56D9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B26054DF1DEA11585A231AF6D1D80D5E; + remoteInfo = "MJRefresh-MJRefresh.Privacy"; + }; + F88D2E05098ACA813D9B4037428FEF1F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; + remoteInfo = Masonry; + }; + FE33D826CCD0D75C3822DD9FB2EEBCE0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; + remoteInfo = MJExtension; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0075507DF323DF510CA1115DE2B33C98 /* LKS_MultiplatformAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_MultiplatformAdapter.h; path = Src/Main/Server/Others/LKS_MultiplatformAdapter.h; sourceTree = ""; }; - 00E5C0F46BD576A82A38738DB780C7D9 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; - 01E24F0E64AEC0E54DBDB063CE89097A /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; - 0236FAD4E41045C8223B36E40BDEDF2C /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; - 0301A3F865A2919DCD43EE9D0DC363A5 /* LookinAutoLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAutoLayoutConstraint.h; path = Src/Main/Shared/LookinAutoLayoutConstraint.h; sourceTree = ""; }; - 036896A95CE28AB066292A03BAD2BFFA /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; - 0370FDB753906B18C1B9AFB8BE7D213C /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; - 037A3F50C10BD2A3B9D2C3743608A737 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - 0426BF3118E242E4EA8BB1145A2A6F60 /* WKWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WKWebView+AFNetworking.m"; path = "UIKit+AFNetworking/WKWebView+AFNetworking.m"; sourceTree = ""; }; - 04549DFA210F3D3C27211535994000B3 /* MJPropertyType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyType.h; path = MJExtension/MJPropertyType.h; sourceTree = ""; }; - 049541DC9203D75878CAF900D458CC34 /* NSObject+MJClass.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJClass.m"; path = "MJExtension/NSObject+MJClass.m"; sourceTree = ""; }; - 05D83C1EC3DD8D27EE1C07CFDE18D72E /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - 06660480BC631DCE06583A85704487AB /* LookinAttributeModification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttributeModification.h; path = Src/Main/Shared/LookinAttributeModification.h; sourceTree = ""; }; - 0696D0619ACA95D8E9E7EFDC0CD595D2 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - 07F0D69559BBD9895C4D0BD66F33AC55 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; - 0AC3ECEAAABFC0FEDCE3E1B814F1A7E5 /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; }; - 0AF433E9D2C6355E77FFBE3AC3CB5B3A /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; + 009D72B656589FB38748BC4F330C2688 /* UIScrollView+EmptyDataSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+EmptyDataSet.h"; path = "Source/UIScrollView+EmptyDataSet.h"; sourceTree = ""; }; + 01763FC6BEDCD3252C0791FA37D9B29B /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; + 02186FE758CB83D1F7BB1BA950BFBDFC /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; + 025F6CD14F8A03C0247CD91101DA4E5E /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; + 02A3FB9606ECFAFB7E0ADD60341CCF48 /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTMask.h; path = "lottie-ios/Classes/Models/LOTMask.h"; sourceTree = ""; }; + 038BE638009D15FEBC743BF8C2341362 /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; + 04A97854FF137F06C6D264D54227F0DE /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; + 0582AF8DFF5BDE75404B2D4484C8DBA8 /* DZNEmptyDataSet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DZNEmptyDataSet-umbrella.h"; sourceTree = ""; }; + 05F37F51FAFA6702910C4E7E1D2616BB /* LOTPolygonAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPolygonAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h"; sourceTree = ""; }; + 060141C08B0B82907CD5F340847F21AC /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; + 073EAD40B8ABA5103E3F86CCCB5712EC /* Bugly.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Bugly.framework; sourceTree = ""; }; + 07D0F6419EF5C5127ACC00EAE195D8A2 /* MJExtensionConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtensionConst.h; path = MJExtension/MJExtensionConst.h; sourceTree = ""; }; + 08333FE8538C0478DED633658959E47F /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + 092146456740DF65E5EAA20611C7D901 /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; + 09A26F9A95E56A246619BCFD34149214 /* LOTShapeStar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeStar.h; path = "lottie-ios/Classes/Models/LOTShapeStar.h"; sourceTree = ""; }; + 09ADD98E6845BBE361C99DDB730B1A04 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; + 09E5CB8850637C7A241D1FE926F62C79 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; + 0A820A148846D1DD18FFC9902C96CD5C /* LOTCircleAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTCircleAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h"; sourceTree = ""; }; + 0ADF7CDFF2B4A4556008C32C26928527 /* LOTAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAsset.m; path = "lottie-ios/Classes/Models/LOTAsset.m"; sourceTree = ""; }; + 0AF554DF7D95156FCCD2EA302AA0138F /* LOTMaskContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTMaskContainer.h; path = "lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.h"; sourceTree = ""; }; 0B4AAC15A428CDC2A62AF9CC27BEA609 /* Pods-CustomKeyboard */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-CustomKeyboard"; path = Pods_CustomKeyboard.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0BDAABEB54032920AAEBA43908724F60 /* ResourceBundle-MJExtension-MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJExtension-MJExtension-Info.plist"; sourceTree = ""; }; - 0BF41BBB1EBC1FE4F91BE320D947ED64 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; - 0C31E11F6B40D55EB650013FAC1B59C0 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + 0B734EC845D5153E6BC7492F474CFDBB /* LookinAppInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAppInfo.h; path = Src/Main/Shared/LookinAppInfo.h; sourceTree = ""; }; + 0BED92A4C73248A5D1906171ED32A63C /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; + 0BF4C6C2E87BA6C07064482E607F1260 /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; + 0C2E63E5EB9C6856F3C527056CE8AD9F /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; + 0C3BC3B9889D1DBDA3735ED1B8C20E49 /* NSObject+MJClass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJClass.h"; path = "MJExtension/NSObject+MJClass.h"; sourceTree = ""; }; 0C4AE62ED97252893F28F670D61AFB24 /* Pods-keyBoard-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-keyBoard-Info.plist"; sourceTree = ""; }; - 0C5C306F08907FB9E1301EA07220C6EB /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 0CE9804DA47B24CF925450C7924EF999 /* Masonry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Masonry.modulemap; sourceTree = ""; }; - 0D18C326A9F4C285AD294832344E63FF /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; 0D6215D1BCCE125B8DF73E38013CBBDC /* Pods-CustomKeyboard.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CustomKeyboard.debug.xcconfig"; sourceTree = ""; }; - 0D703CF356A8E2B3B3665722366223A5 /* Lookin_PTPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTPrivate.h; path = Src/Main/Shared/Peertalk/Lookin_PTPrivate.h; sourceTree = ""; }; - 0E24EFDE111F674B782A0DB6E26DA6D2 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; + 0D76176C423BFBDD4960A5AF21E6DC5A /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; + 0DA04830283FDE4CF460F848A504417A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = WebImage/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 0DED0E6684133B62F60FD2914ADC6FEF /* LookinServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LookinServer-dummy.m"; sourceTree = ""; }; 0E732C0D026ACBC7DBD039DC3BDC2BCE /* Pods-keyBoard.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-keyBoard.modulemap"; sourceTree = ""; }; - 0F0234E8EBBDCA694F549267CF8444C2 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; - 0FD3FF7FA5E997D3DDAB5C272F8734A6 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; - 107E924936A407875330C174B34260AC /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; - 1110127348EF0DD2FF03A68A13D86895 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; - 120B89B8756AC54266917A34CDCADBB2 /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; - 12119FD9C09B77E5C8A003238C89E88A /* UIView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+LookinServer.h"; path = "Src/Main/Server/Category/UIView+LookinServer.h"; sourceTree = ""; }; - 12F12865FFC70E396EDFB92C4A7F13D7 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; - 131863AC3A27979CE5BF1B35EB9C1CED /* SDImageFramePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFramePool.m; path = SDWebImage/Private/SDImageFramePool.m; sourceTree = ""; }; - 13D448A155C957ECCF95DC54FBE28569 /* SDCallbackQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCallbackQueue.m; path = SDWebImage/Core/SDCallbackQueue.m; sourceTree = ""; }; - 148FDB67C55B5854E979447E82AFD54E /* SDImageFramePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFramePool.h; path = SDWebImage/Private/SDImageFramePool.h; sourceTree = ""; }; - 1550F0B5EA5360BFA35606256AB6EF51 /* Lookin_PTProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTProtocol.h; path = Src/Main/Shared/Peertalk/Lookin_PTProtocol.h; sourceTree = ""; }; - 15D08EB14955AB2B841A5E9E16D8D4AE /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = ""; }; - 15E423D2DE3EB3895273EDB5BC21FDE9 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - 15EEB72FE94B15511A9B077601BFC002 /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; - 16C85770D72E9770C476992A31B3655F /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; - 17422A39378973466DCE06FB6ADA832E /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; - 189A631A2ED6331F0A226846AD73B1E4 /* LookinEventHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinEventHandler.m; path = Src/Main/Shared/LookinEventHandler.m; sourceTree = ""; }; - 18DB01964CBE026F2E6511875E1A98E2 /* Bugly.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugly.debug.xcconfig; sourceTree = ""; }; - 1948F2AFCD4F7087CA46FB78E5A05ABD /* LookinAttributesGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttributesGroup.h; path = Src/Main/Shared/LookinAttributesGroup.h; sourceTree = ""; }; - 19CD19C5B1822DA77E4C7C9F454FD5D5 /* Image+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Image+Lookin.m"; path = "Src/Main/Shared/Category/Image+Lookin.m"; sourceTree = ""; }; - 19F3928D9276C0125AA1EBDB31A470E1 /* SDCallbackQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCallbackQueue.h; path = SDWebImage/Core/SDCallbackQueue.h; sourceTree = ""; }; - 1A62C9B59CFA9D74EE95F526BE485EC8 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; - 1C3AD08A39781246EBAC23F5B8A9BDD3 /* UIScrollView+EmptyDataSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+EmptyDataSet.m"; path = "Source/UIScrollView+EmptyDataSet.m"; sourceTree = ""; }; - 1C5B4FB13625B33C4ABB17DDEF05C782 /* LookinCustomDisplayItemInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinCustomDisplayItemInfo.m; path = Src/Main/Shared/LookinCustomDisplayItemInfo.m; sourceTree = ""; }; - 1CA256AA8704AE9F135214714BAFF153 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; - 1D4236904A41DC2950754F5BE583BD4A /* UIColor+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+LookinServer.m"; path = "Src/Main/Server/Category/UIColor+LookinServer.m"; sourceTree = ""; }; - 1D74E044AA7CFE331B6C3B53D98B1022 /* LKS_CustomAttrSetterManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomAttrSetterManager.m; path = Src/Main/Server/Others/LKS_CustomAttrSetterManager.m; sourceTree = ""; }; + 0ED90D2CA6E5F0A64EAE0846FA566178 /* LookinConnectionAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinConnectionAttachment.m; path = Src/Main/Shared/LookinConnectionAttachment.m; sourceTree = ""; }; + 0F2CD5591B9920DFEE95E0D02CD7172B /* UIBlurEffect+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBlurEffect+LookinServer.m"; path = "Src/Main/Server/Category/UIBlurEffect+LookinServer.m"; sourceTree = ""; }; + 0F6F5579B9644EB3E8A7772977F641D4 /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeTrimPath.m; path = "lottie-ios/Classes/Models/LOTShapeTrimPath.m"; sourceTree = ""; }; + 0FBB3D95250E585EF0343DF2BC5290AA /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = ""; }; + 108CAD04AE05DC568C1E9E7A16D52875 /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; + 113192C829148EF6BB5232DC8A352284 /* UIBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIBezierPath.h; path = "lottie-ios/Classes/MacCompatibility/UIBezierPath.h"; sourceTree = ""; }; + 115C3E9007751CB9170B5BD6B88B296C /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; + 1181A58E703113D29E11E933C4405B3D /* LKSConfigManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKSConfigManager.m; path = Src/Main/Server/Others/LKSConfigManager.m; sourceTree = ""; }; + 11B78563CFB78FEC5CB39AE8C4F051E6 /* LOTShapeRepeater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeRepeater.h; path = "lottie-ios/Classes/Models/LOTShapeRepeater.h"; sourceTree = ""; }; + 137A4E94A88AFED8DF9942FCD8031663 /* LOTShapeStroke.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeStroke.m; path = "lottie-ios/Classes/Models/LOTShapeStroke.m"; sourceTree = ""; }; + 143EC1D5A4E77659DF21C85FBEBCF739 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; + 1485A77C75A87C3D9C35F8002931EE32 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 14A3CDE16C316BF2E36E352A45B9801E /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; + 14ADFCF379EBFC22FDF2F560A71B401F /* LKS_ConnectionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_ConnectionManager.m; path = Src/Main/Server/Connection/LKS_ConnectionManager.m; sourceTree = ""; }; + 14EF04750B2EB7A7F73D729913572ACC /* LOTRoundedRectAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRoundedRectAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h"; sourceTree = ""; }; + 155B2767368B4C888D812077B0A69821 /* UIView+WebCacheState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheState.h"; path = "SDWebImage/Core/UIView+WebCacheState.h"; sourceTree = ""; }; + 162D928CE2A089AEA1EF3CC1D765F0A6 /* NSArray+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Lookin.m"; path = "Src/Main/Shared/Category/NSArray+Lookin.m"; sourceTree = ""; }; + 16593D52092C42002F8CAB487C78A27C /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 17C0D854E09D16BB681D45ED327BAC8E /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTLayerGroup.h; path = "lottie-ios/Classes/Models/LOTLayerGroup.h"; sourceTree = ""; }; + 18AFA5B0B1A9EF84657670C7FAC7A9F2 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; + 18DC9B08E606765DE6D26A767B58AD1A /* LOTShapeStroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeStroke.h; path = "lottie-ios/Classes/Models/LOTShapeStroke.h"; sourceTree = ""; }; + 1913D7B9AD326C90DCD4BB68A80B3046 /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; + 1955F41E0706379EF05FC01843BA8921 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; + 19C0B5EA65AF33AEAD852CEA9EAD8BA5 /* LookinServer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LookinServer.modulemap; sourceTree = ""; }; + 1A0055A793E4CA7BC665FB8D71AB9FA0 /* LKS_ConnectionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_ConnectionManager.h; path = Src/Main/Server/Connection/LKS_ConnectionManager.h; sourceTree = ""; }; + 1B5B21AFCADF2084C13FE18D9005357A /* LOTInterpolatorCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTInterpolatorCallback.h; path = "lottie-ios/Classes/PublicHeaders/LOTInterpolatorCallback.h"; sourceTree = ""; }; + 1B727AAC500EF9B539E094E9C11C4D7F /* LookinCustomAttrModification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinCustomAttrModification.m; path = Src/Main/Shared/LookinCustomAttrModification.m; sourceTree = ""; }; + 1B7FBC2AB719120F37255CB203D19C30 /* MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJProperty.h; path = MJExtension/MJProperty.h; sourceTree = ""; }; + 1B921FF6F8D91DE355289CD299B0C48A /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; + 1BA9AAA7CE7F25495C1E05CC418178B7 /* UIImageView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+LookinServer.m"; path = "Src/Main/Server/Category/UIImageView+LookinServer.m"; sourceTree = ""; }; + 1BD06FE5E7BD6C03CE890911563EEF5E /* MJFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJFoundation.h; path = MJExtension/MJFoundation.h; sourceTree = ""; }; + 1C5877EADFE0A161E5C97583382CB47D /* MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJProperty.m; path = MJExtension/MJProperty.m; sourceTree = ""; }; + 1CE057CCEA5D2012438C45F87BB9D356 /* LookinWeakContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinWeakContainer.m; path = Src/Main/Shared/LookinWeakContainer.m; sourceTree = ""; }; 1D774D8146EBC82B4A77204A273761B8 /* Pods-CustomKeyboard.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CustomKeyboard.release.xcconfig"; sourceTree = ""; }; - 1E12075C58652877783AAD26D8A6ED78 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; - 1F43D293502C6A280429EF2DEFA6C0E6 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; - 1FC42F03931384EE2605E5C1FF575608 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; + 1D7F51642DDCF1DC83B98FDD221BF1B7 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; + 1D81C868C1831665C180086D5F3CDCF6 /* UILabel+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+LookinServer.h"; path = "Src/Main/Server/Category/UILabel+LookinServer.h"; sourceTree = ""; }; + 1DCDEE016EE11CD11BD0E469EEB8197E /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; + 1E710F4FB16EBBAC69C02C56E882DD89 /* LookinAppInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAppInfo.m; path = Src/Main/Shared/LookinAppInfo.m; sourceTree = ""; }; + 1FD8AED60E26E34AE37988903944A3AD /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; 1FFED36A657123030ABB700256D73F15 /* Masonry */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Masonry; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2039E8AAF8AAC77E31E425C61871263D /* Image+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Image+Lookin.h"; path = "Src/Main/Shared/Category/Image+Lookin.h"; sourceTree = ""; }; - 2065E7BBA3909607E34531E7D59623FF /* MJRefresh-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-umbrella.h"; sourceTree = ""; }; - 20C240076DD8D1DC14E751DAFAE98662 /* DZNEmptyDataSet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DZNEmptyDataSet-Info.plist"; sourceTree = ""; }; - 21628153BCD0325102EB502FB5AEDF0F /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; - 219886C4AF0E20C3CD4D4061CAAE8767 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 220B8AB16FBD2158AB55D35E9376D13A /* UIBlurEffect+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBlurEffect+LookinServer.h"; path = "Src/Main/Server/Category/UIBlurEffect+LookinServer.h"; sourceTree = ""; }; - 2254BB0E1CAB331C712E8819CE1CEBA9 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; - 23D7D1DC3E63FD87D87BE6C2EB198360 /* AFNetworking-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFNetworking-Info.plist"; sourceTree = ""; }; - 241065D9A03A30BC61C328A01C40E560 /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; - 241D729CBB4E30C3E09474F7F34CB9FA /* UIImage+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+LookinServer.h"; path = "Src/Main/Server/Category/UIImage+LookinServer.h"; sourceTree = ""; }; - 245FCAB926AF197B8F4E931DD8477D4A /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - 24998A1052F45827E4FFAFAF7FA1542E /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; - 25391D44BC144DD932559C9E9069347F /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + 20E3D5F73805D1354BC5705A581B7310 /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; + 212D5F3CFC0D02910520EB36BD99D7F6 /* LookinCustomAttrModification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinCustomAttrModification.h; path = Src/Main/Shared/LookinCustomAttrModification.h; sourceTree = ""; }; + 21D0C6357BF8326FF0066E3513EEA5BC /* MJPropertyKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyKey.m; path = MJExtension/MJPropertyKey.m; sourceTree = ""; }; + 21F65C758C599537C151265FFA275338 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; + 2221DB8D43C762DB571693B35D1BAFD0 /* MJRefreshConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConfig.m; path = MJRefresh/MJRefreshConfig.m; sourceTree = ""; }; + 2243DD00DE471869684FE10CFA3F77E3 /* WKWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WKWebView+AFNetworking.m"; path = "UIKit+AFNetworking/WKWebView+AFNetworking.m"; sourceTree = ""; }; + 22B6BB9CDA19A8DDDA9A41F3FD59CE86 /* UIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIColor.h; path = "lottie-ios/Classes/MacCompatibility/UIColor.h"; sourceTree = ""; }; + 22C2CA34C66E1BD2C48A82C7DB56E6D6 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; + 233C37AC69FFC5B7F27E6C9BA33D8F2F /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + 2353F897342612360614276D7D592737 /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; }; + 237831FD808D45AA5DB8412C1BA57713 /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; + 23E1A13685067AF13A97BF22C69FA0CC /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 23EC829A73BE2C983F20E677FDCE58A3 /* LKS_Helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_Helper.h; path = Src/Main/Server/Others/LKS_Helper.h; sourceTree = ""; }; + 2414A027047ABE3A2476AA9C35FE8895 /* NSString+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Lookin.m"; path = "Src/Main/Shared/Category/NSString+Lookin.m"; sourceTree = ""; }; + 2422FBE983F4A7ED65B9DB61A2C03B6E /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; + 253F01264DD6A7D63DB8CC1D7D744996 /* LKS_CustomAttrSetterManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomAttrSetterManager.h; path = Src/Main/Server/Others/LKS_CustomAttrSetterManager.h; sourceTree = ""; }; 25664483ABF4DC8EC03E7472AA04333B /* LookinServer */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = LookinServer; path = LookinServer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2567115C715DFD2B942FF9386C729778 /* UIViewController+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+LookinServer.h"; path = "Src/Main/Server/Category/UIViewController+LookinServer.h"; sourceTree = ""; }; - 25AADAD73C32FC4E150A4A19780980C4 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; - 2625A6F485FAAFFDD766C135FDF8F796 /* DZNEmptyDataSet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DZNEmptyDataSet.modulemap; sourceTree = ""; }; - 26476CAEC54A4CE04264494F816DFD2C /* CALayer+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+LookinServer.h"; path = "Src/Main/Server/Category/CALayer+LookinServer.h"; sourceTree = ""; }; - 26E9B5584E3E3AA9E7AF8978192DF06B /* DZNEmptyDataSet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DZNEmptyDataSet-prefix.pch"; sourceTree = ""; }; - 2731C084E8B9BB6A54629DDFEBD14EA1 /* UIVisualEffectView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIVisualEffectView+LookinServer.m"; path = "Src/Main/Server/Category/UIVisualEffectView+LookinServer.m"; sourceTree = ""; }; + 2566991209B800FD7FAF17517B045915 /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = ""; }; + 260216431024153F0424A4A48619E4A6 /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; + 267474AEE2CD1927089157AE230FB8DC /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; + 26A29B86831E8809CE008EFE8008936E /* LKS_CustomDisplayItemsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomDisplayItemsMaker.m; path = Src/Main/Server/Others/LKS_CustomDisplayItemsMaker.m; sourceTree = ""; }; + 26EDE554C5CF56F050377BDB96246E48 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; + 27B5D6B05B61EFEC8D039AA8C973FFFF /* LOTShapeFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeFill.m; path = "lottie-ios/Classes/Models/LOTShapeFill.m"; sourceTree = ""; }; + 27BBE0C549C27AFC3E95E715586E93F6 /* LKS_MultiplatformAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_MultiplatformAdapter.h; path = Src/Main/Server/Others/LKS_MultiplatformAdapter.h; sourceTree = ""; }; 281686F4C9CC2C718B45E1DEB7E63948 /* Pods-CustomKeyboard-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CustomKeyboard-acknowledgements.markdown"; sourceTree = ""; }; - 290A1387E4C301A25D8613FBB0DCEC6A /* LookinDashboardBlueprint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinDashboardBlueprint.m; path = Src/Main/Shared/LookinDashboardBlueprint.m; sourceTree = ""; }; - 2940A878AE956B2190BA5A68D63DC5AD /* MBProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.debug.xcconfig; sourceTree = ""; }; - 299CDB086FE0568EE14EAB79D7B74437 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; - 2A5A249D6ED704F9FEE1FFBC9B61426F /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; - 2A67F3F63FB3C05544B8F66F7ED89E74 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; - 2A7BA44CD5FDF42B32263B5F4259A024 /* MJExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJExtension-dummy.m"; sourceTree = ""; }; - 2AEE1DAEE2CD1BAB6DBCBC50916263A4 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; + 28191A1942A1820843B4FC59A92128B6 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; + 2891F6EE4D0052CFD31079E28FEF51E8 /* LookinWeakContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinWeakContainer.h; path = Src/Main/Shared/LookinWeakContainer.h; sourceTree = ""; }; + 28A4713E0867604971607974AF9B43EE /* NSSet+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSSet+Lookin.h"; path = "Src/Main/Shared/Category/NSSet+Lookin.h"; sourceTree = ""; }; + 28B17DCC89FCDA5BCF7A5FC8C5090B1D /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoNormalFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m; sourceTree = ""; }; + 28C700888F633E86E1D8FA3945E75225 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; + 29B87A5985A35DC16F7168622665924E /* LookinServer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LookinServer-prefix.pch"; sourceTree = ""; }; + 29FD2B9A63329EFCBCA88572F71055A7 /* LookinAttrIdentifiers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttrIdentifiers.m; path = Src/Main/Shared/LookinAttrIdentifiers.m; sourceTree = ""; }; + 2A7DFAA6909322BD702F66A06CDF4D02 /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJExtension; path = MJExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BA061B3651D9243CBD96694626B95C1 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = ""; }; - 2CC603030F93055E51FF99944B356CB6 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; - 2CFE5CE900A783BD5709EEF033BA8475 /* LookinServer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LookinServer-Info.plist"; sourceTree = ""; }; - 2D069519EE909290F7C452231691CA88 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; - 2D3B8DD288273B0C3AFDD2F366BB894B /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - 2D93B5DFF8656FC20174F5CDCB325540 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - 2DAD93B79D27664FE05E862A2C992A45 /* LookinServer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LookinServer.release.xcconfig; sourceTree = ""; }; - 2DFD54923DA02EA135A1A1E2F56CBDE1 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; - 2EEEDD3CF0530751FD80AFB402DAB153 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJKeyValue.m"; path = "MJExtension/NSObject+MJKeyValue.m"; sourceTree = ""; }; - 2F154763B55BC95D1F3E0C64970B8D48 /* LookinCustomAttrModification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinCustomAttrModification.h; path = Src/Main/Shared/LookinCustomAttrModification.h; sourceTree = ""; }; - 2F6981AC25702BE9417B498391042242 /* LookinAppInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAppInfo.h; path = Src/Main/Shared/LookinAppInfo.h; sourceTree = ""; }; - 2FD6A0DEDE4E0A17B8A614C8D15158DD /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; - 2FE87671299E95720DB52DD3375B566E /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; - 30361FA11468C74A598363E37D30E56C /* LKS_ObjectRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_ObjectRegistry.m; path = Src/Main/Server/Others/LKS_ObjectRegistry.m; sourceTree = ""; }; - 30A10CFE082F8338A031688B47CDED17 /* LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinServer.h; path = Src/Main/Server/LookinServer.h; sourceTree = ""; }; - 319E8C485C3E5DB2BFBF15AA61E5ABA9 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 31C3AFC445B760812F9E6924ABB9CC15 /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = ""; }; - 31C69A4489CC7299F114CDEAFBE0DE3C /* LKS_MultiplatformAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_MultiplatformAdapter.m; path = Src/Main/Server/Others/LKS_MultiplatformAdapter.m; sourceTree = ""; }; - 31E7ED25B098BFBF30E180BFC0E2174B /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; - 32556CF656ADFF88DE99F135C7BE2EB7 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - 336D23D3AF9B2B8FD356A62D7B4A2A05 /* NSObject+MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJProperty.m"; path = "MJExtension/NSObject+MJProperty.m"; sourceTree = ""; }; - 33E548EC20D55A1581EF030D8F590720 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; - 341D877992B274AC6FD93AB03542E561 /* Lookin_PTChannel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTChannel.h; path = Src/Main/Shared/Peertalk/Lookin_PTChannel.h; sourceTree = ""; }; - 34206822AA40B77DF3E1B3B5D326158F /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; - 34294BB6B51E74AFE5298D85D957E2F6 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - 35182E600B80DDDFBA4A4B90FAA71EFD /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - 352F463EFB3454F98E285A844376EC28 /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; - 35618C07738616EC64E35AB9084E01C6 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 2B52EF67A97FD22FB044A97343A9B21A /* LookinDisplayItemDetail.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinDisplayItemDetail.m; path = Src/Main/Shared/LookinDisplayItemDetail.m; sourceTree = ""; }; + 2B8E68203A99208382E91AF416646F49 /* ResourceBundle-MJExtension-MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJExtension-MJExtension-Info.plist"; sourceTree = ""; }; + 2C1D86F67FBC7E9087B8D96626CF725E /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; + 2C477F73C90FE2DF3612D030B50B3838 /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = ""; }; + 2C7548F2A8537D1A085C05114169403B /* MJExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-umbrella.h"; sourceTree = ""; }; + 2D0B2972DB20A835206E3CD09AD37834 /* DZNEmptyDataSet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DZNEmptyDataSet-prefix.pch"; sourceTree = ""; }; + 2D1B0275ADBEF79FAE38A1950474FFE2 /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Expanded.h"; path = "lottie-ios/Classes/Extensions/UIColor+Expanded.h"; sourceTree = ""; }; + 2D2C5101C8A6382A6CB5C288F83A8E0A /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = ""; }; + 2DBED93C98FBCF02E6C348D72AE3467E /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; + 2DD515F7A425516B00425763414DBDE3 /* MJExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJExtension.modulemap; sourceTree = ""; }; + 2DD74F97D4DA32C882FEDE95C5EBB8EE /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 2E77C169CB17466002DB92D7552A1CE3 /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; + 2E9C47111ED27E332992565A571B8E1E /* LOTBlockCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTBlockCallback.h; path = "lottie-ios/Classes/PublicHeaders/LOTBlockCallback.h"; sourceTree = ""; }; + 2EA6FE188B790C5187D388E7DBF4903B /* LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinServer.h; path = Src/Main/Server/LookinServer.h; sourceTree = ""; }; + 2EFC6C70CB4E71F532E78C711BCF271A /* LOTBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTBezierPath.m; path = "lottie-ios/Classes/Extensions/LOTBezierPath.m"; sourceTree = ""; }; + 30569FA1EC7CBB3F016F8B51EBE46731 /* LOTAnimationTransitionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimationTransitionController.m; path = "lottie-ios/Classes/Private/LOTAnimationTransitionController.m"; sourceTree = ""; }; + 30A9947185CE475FEBC98A47A30A4C30 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; + 321912138DF88B91861FB8BC409A0A6D /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; + 32A9453657A00F96F67E70F7AC7A0F7A /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 332ED2DB44E7CA9727108143D82CFD47 /* LOTPolygonAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTPolygonAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m"; sourceTree = ""; }; + 333B8F2E8C0FCAC3100D466CF1DB108F /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; + 334223D1732D9FA282B307802354F822 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; + 340A57C04C907722A2529BC7E5F00245 /* LOTRenderGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRenderGroup.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h"; sourceTree = ""; }; + 35030695B7BEB6D9746F4153406B5234 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; + 3530E3233AB5FDDD021147EAB477BC6B /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; }; + 354F2536ED984CA4D2D0557F44DD98EB /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = ""; }; + 3596AC524204321ADEC9BB7FBBB1DAB0 /* LOTPointInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPointInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h"; sourceTree = ""; }; + 35A75BA7C6FAC4078A7777D59F6B787E /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; 35BFA337F4E1FDE67C773A82CCDFD6DA /* Pods-keyBoard.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-keyBoard.debug.xcconfig"; sourceTree = ""; }; - 364231170128CA2CD3F9589FE34C2FAE /* NSObject+MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJProperty.h"; path = "MJExtension/NSObject+MJProperty.h"; sourceTree = ""; }; - 371FD070C447028E0DC76F07BB442FC4 /* LKS_Helper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_Helper.m; path = Src/Main/Server/Others/LKS_Helper.m; sourceTree = ""; }; - 37559870F51779045F8C7A57C1303E2D /* LKS_InbuiltAttrModificationHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_InbuiltAttrModificationHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_InbuiltAttrModificationHandler.m; sourceTree = ""; }; - 383AEE356898B114D8DD079C51566FF2 /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; + 360B11050A020700AC654D7E70206A75 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = ""; }; + 3628C45AD1D63F88BECAB6047AEA970F /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = ""; }; + 36F0FA6F6A2819FD3BB42BAF0CC428F9 /* LookinDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDefines.h; path = Src/Main/Shared/LookinDefines.h; sourceTree = ""; }; + 370FAC9D62B95469A30702A3BD34569B /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; + 3749B43BEC208D26F5E83E6A22AE3271 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 37FC258EA782835D2F4B690CE8D18C4E /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; + 386F002BCF5A7ED180013733139D51E9 /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; + 387311E074CEB0F9F817707896689271 /* LOTRoundedRectAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTRoundedRectAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m"; sourceTree = ""; }; + 38B5EB5EDEA91AF4FC11989687A8FAB0 /* LOTValueInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTValueInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h"; sourceTree = ""; }; + 38BC517337ABB5BD491E24FFD29499B6 /* UITextField+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+LookinServer.m"; path = "Src/Main/Server/Category/UITextField+LookinServer.m"; sourceTree = ""; }; + 391C48C35FC8E4BA5DD8A3B5FEE1EC06 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; 3964617E5C241BE3E12D8F1D88607841 /* 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; }; - 3996B697C00897DAFE1DFD73DAA4E114 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 3B6B095661E36C4E8A066559D4D5AF33 /* LookinConnectionResponseAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinConnectionResponseAttachment.m; path = Src/Main/Shared/LookinConnectionResponseAttachment.m; sourceTree = ""; }; - 3BBF905BC343AA0D52B6BC0B1E5B22E9 /* CALayer+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+Lookin.m"; path = "Src/Main/Shared/Category/CALayer+Lookin.m"; sourceTree = ""; }; - 3BF9DE6E63B2A31CC1EADA84D3E42E7A /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; - 3C0293D25B82D4CCF17D52B025BDDA03 /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; - 3CA1F0AA7C906C09D35E1B3B781EB6E0 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; + 3986483EB018703D62F349C2BA876EEA /* MJRefreshConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConfig.h; path = MJRefresh/MJRefreshConfig.h; sourceTree = ""; }; + 39A92D0AF92DEC605DB954284FF6F144 /* LOTAnimatorNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimatorNode.h; path = "lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h"; sourceTree = ""; }; + 39EAB7B8BB80BFCF4A6C703116F64865 /* Color+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Color+Lookin.h"; path = "Src/Main/Shared/Category/Color+Lookin.h"; sourceTree = ""; }; + 39F5FF5E3E9A0A55CAB1DC5D3F46714C /* LookinAttributeModification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttributeModification.h; path = Src/Main/Shared/LookinAttributeModification.h; sourceTree = ""; }; + 3AF7EEC072D42B930C8EFE40C2BBBE44 /* LookinAttributesGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttributesGroup.h; path = Src/Main/Shared/LookinAttributesGroup.h; sourceTree = ""; }; + 3B4139AF3CC702B273D55B84E85D3950 /* LKSConfigManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKSConfigManager.h; path = Src/Main/Server/Others/LKSConfigManager.h; sourceTree = ""; }; + 3BFB12A07B7CD710DC791392EF1601B2 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = ""; }; 3CB13D51E717D347023EEB57263E3072 /* Pods-CustomKeyboard-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CustomKeyboard-dummy.m"; sourceTree = ""; }; - 3CF065C3DEDD146A59230103D73E1A55 /* LookinServer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LookinServer.modulemap; sourceTree = ""; }; - 3D64DD7369F8D81EDC16FC3539F46D73 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; - 3D6CF72BA8B7618D0238AD641B57FE35 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; - 3D7966DEA2CA0101B9FC2C01A1A2909B /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; - 3D891833337A0E2AFA0DBB31899C747F /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; - 3DD65B80E7AA07416BB8F502F3C3A438 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 3DDB2F652BC38BC05396DCC9F34040CD /* MJRefreshStateTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h; sourceTree = ""; }; - 3E2A55F2F78E11DEDCF2FA119B3E1912 /* MJExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.release.xcconfig; sourceTree = ""; }; - 3E2B86406A2B5383183DAE9ABBBB3893 /* LKS_HierarchyDisplayItemsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_HierarchyDisplayItemsMaker.m; path = Src/Main/Server/Others/LKS_HierarchyDisplayItemsMaker.m; sourceTree = ""; }; - 3E5219BC7E7BF5C405E48CC237D2EDC2 /* NSSet+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSSet+Lookin.m"; path = "Src/Main/Shared/Category/NSSet+Lookin.m"; sourceTree = ""; }; - 3ED91326A0371ACE08A353BC67F60F6B /* NSString+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Lookin.m"; path = "Src/Main/Shared/Category/NSString+Lookin.m"; sourceTree = ""; }; - 3F39E9FDE611BCC2A514A77F1EB63E8B /* MJPropertyKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyKey.m; path = MJExtension/MJPropertyKey.m; sourceTree = ""; }; - 3F61B84FD6B8249C85FCBF56257E34C6 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 400DE9B9180EAE02FE3ADA6DB9EFD64F /* LookinServer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LookinServer-prefix.pch"; sourceTree = ""; }; - 40B6DD67F49B0103232B5D6B727392FA /* LookinAttributesSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttributesSection.h; path = Src/Main/Shared/LookinAttributesSection.h; sourceTree = ""; }; - 4211A99A6EE6255E875FA46E987F2128 /* Lookin_PTUSBHub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTUSBHub.h; path = Src/Main/Shared/Peertalk/Lookin_PTUSBHub.h; sourceTree = ""; }; - 42189E436FCC0F9F0BAA536F3BF84910 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; - 4223ACF818570B18B88D6B2884075BF1 /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; - 426AEC2F7F358DEDB66C3F2D15F925A4 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; + 3D48C6742E38C4FE45D03CC723412748 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 3DAE2D8D9C2E257F951F15C3DA77323B /* LookinObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinObject.h; path = Src/Main/Shared/LookinObject.h; sourceTree = ""; }; + 3E3B71AEC196329C31EDD4D4AB34276A /* LookinObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinObject.m; path = Src/Main/Shared/LookinObject.m; sourceTree = ""; }; + 3E419E7B3068425BA42B12905F41B470 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; + 3E4850AE143E84F838F3B42BB41A596B /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; + 3E4FCD9CEBFE2AEFFBBDCA5661E5113C /* LookinAttributesGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttributesGroup.m; path = Src/Main/Shared/LookinAttributesGroup.m; sourceTree = ""; }; + 3F24D2100AD72D115D29B29BEFA1D3EB /* Peertalk.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Peertalk.h; path = Src/Main/Shared/Peertalk/Peertalk.h; sourceTree = ""; }; + 3FF4A465A71C22D855FFE8635EE239FE /* LOTPathInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPathInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h"; sourceTree = ""; }; + 3FF6AF03494CB12E91A424BC6E068CFC /* LOTKeypath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTKeypath.m; path = "lottie-ios/Classes/Private/LOTKeypath.m"; sourceTree = ""; }; + 3FFFEB5A4266C57EF054676F61E3ED14 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 406B19CDA73B6B348EB34EDE3206DE05 /* LOTRenderNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRenderNode.h; path = "lottie-ios/Classes/RenderSystem/LOTRenderNode.h"; sourceTree = ""; }; + 412199FDA4EB083F463E1C33A21C8CC1 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateHeader.m; path = MJRefresh/Custom/Header/MJRefreshStateHeader.m; sourceTree = ""; }; + 418208706EF0ED4137ADA295565205D7 /* LookinStaticAsyncUpdateTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinStaticAsyncUpdateTask.h; path = Src/Main/Shared/LookinStaticAsyncUpdateTask.h; sourceTree = ""; }; + 419EAE78B6D36DA2749972D0E4AD9694 /* LookinDashboardBlueprint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDashboardBlueprint.h; path = Src/Main/Shared/LookinDashboardBlueprint.h; sourceTree = ""; }; + 423011622DD8F81713938A78B5F61A57 /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; + 426E847E30B13D9F12156B9BDFD81EB4 /* LookinCustomDisplayItemInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinCustomDisplayItemInfo.h; path = Src/Main/Shared/LookinCustomDisplayItemInfo.h; sourceTree = ""; }; + 42A0EB37C7894465F7B5A5D138B1CF5F /* NSObject+MJClass.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJClass.m"; path = "MJExtension/NSObject+MJClass.m"; sourceTree = ""; }; + 42E528E57386958143E76DC7A69BD943 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; + 4336B050F67799536B9CCB71760576DE /* LookinEventHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinEventHandler.h; path = Src/Main/Shared/LookinEventHandler.h; sourceTree = ""; }; + 4340A919516C86B8ABCCED87AA263BB8 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; 43EAAD2AB7E6B407E80E95F643F93D22 /* MJExtension-MJExtension */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "MJExtension-MJExtension"; path = MJExtension.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 45DC3F40C3A1FA5B5920DED3DF89557C /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; - 45EDC4788D38048F75B7F3CD0BEF1783 /* MJRefresh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.release.xcconfig; sourceTree = ""; }; - 45F43707DFF3E5A8EFA1404F7259F5DF /* NSObject+MJCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJCoding.m"; path = "MJExtension/NSObject+MJCoding.m"; sourceTree = ""; }; - 46771EF8828C8A7519CEFD7A8DF062BE /* LKS_TraceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_TraceManager.h; path = Src/Main/Server/Others/LKS_TraceManager.h; sourceTree = ""; }; - 4730B0C65CA50BE6D828887D7CC8EB9F /* LookinCustomAttrModification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinCustomAttrModification.m; path = Src/Main/Shared/LookinCustomAttrModification.m; sourceTree = ""; }; - 4770EEEC71445F1C55A5C71E32517009 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; - 477B43B19C3181419CE0D39929320355 /* LKS_AttrModificationPatchHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_AttrModificationPatchHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_AttrModificationPatchHandler.h; sourceTree = ""; }; - 47E596E1EB48CB4E8DE37CC0D5122787 /* MJFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJFoundation.m; path = MJExtension/MJFoundation.m; sourceTree = ""; }; - 4819E2A59EFDCF27B3C3DDB40C7B2D13 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; - 48A9A2DE85C1D87BCD354418BAF78749 /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; - 49A24CBDEFCE6B22E2D355C6D04AC9B4 /* NSArray+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Lookin.m"; path = "Src/Main/Shared/Category/NSArray+Lookin.m"; sourceTree = ""; }; - 4B2A98ADD6BF259F1E366B570C576632 /* LKSConfigManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKSConfigManager.m; path = Src/Main/Server/Others/LKSConfigManager.m; sourceTree = ""; }; - 4C9BF32317317006604613DB6B7E6531 /* MJRefreshConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConfig.m; path = MJRefresh/MJRefreshConfig.m; sourceTree = ""; }; - 4D125D803F381B689272DFC8613DDA9A /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - 4D2D491E6C287C5C66C4EF6B165E85BD /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; - 4D47A5312A106ED050240FD5A4E84CE4 /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; - 4E7FA66C9DDB6507631DF1F179557C4A /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; - 4FD8426A1028406F5A9C4E27D5C9E76C /* Color+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Color+Lookin.h"; path = "Src/Main/Shared/Category/Color+Lookin.h"; sourceTree = ""; }; - 504A6EFB974AF03849BCBDD8A6C0A198 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 5104591E28208BB976FFAD3D7AFA2F58 /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; }; - 51D6AF1225DCDC66E13DAA2BCB6B1DCF /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; sourceTree = ""; }; - 5210B0534D834B2EF86FDFCE90B73F2D /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJKeyValue.h"; path = "MJExtension/NSObject+MJKeyValue.h"; sourceTree = ""; }; - 5212AF1887982114A494FF962BEF5A35 /* LookinConnectionAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinConnectionAttachment.h; path = Src/Main/Shared/LookinConnectionAttachment.h; sourceTree = ""; }; - 5248A2EBBCEB19A0BBFA557B594E2DEA /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = ""; }; - 52832E51BDED300B58102A301664AD5A /* DZNEmptyDataSet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DZNEmptyDataSet.release.xcconfig; sourceTree = ""; }; - 528C15198BF77FCE909FB6A717EA8C53 /* LookinAutoLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAutoLayoutConstraint.m; path = Src/Main/Shared/LookinAutoLayoutConstraint.m; sourceTree = ""; }; - 52CE89D1B7CAF7D6D1E509FE1267800A /* DZNEmptyDataSet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DZNEmptyDataSet-dummy.m"; sourceTree = ""; }; - 52EF359F996014A062F3A2945F10438A /* NSString+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Lookin.h"; path = "Src/Main/Shared/Category/NSString+Lookin.h"; sourceTree = ""; }; - 52FBF3084E82AF80B1B017FB5240AF4F /* LKS_HierarchyDisplayItemsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_HierarchyDisplayItemsMaker.h; path = Src/Main/Server/Others/LKS_HierarchyDisplayItemsMaker.h; sourceTree = ""; }; + 440E94B9AD51FDF38170F43B90585F96 /* LookinEventHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinEventHandler.m; path = Src/Main/Shared/LookinEventHandler.m; sourceTree = ""; }; + 4477BB9DDE05D1D2E53E7D7AC8E674E5 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; + 44F1C2F29BE259740E3D14869F4FA2D4 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; + 44FF37EE3087F83CC98A26E173129B85 /* LOTTransformInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTTransformInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h"; sourceTree = ""; }; + 454998BDBA877E6A94CA2DFFA4D13CCE /* LOTShapeGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeGroup.h; path = "lottie-ios/Classes/Models/LOTShapeGroup.h"; sourceTree = ""; }; + 454AE8290CADCF24FC0C50B45EA09057 /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; + 4552D8C330B0C2C1287281C74A75D135 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; + 45920C19D3CF59590B6DE6FBD0F6421A /* LOTLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTLayer.h; path = "lottie-ios/Classes/Models/LOTLayer.h"; sourceTree = ""; }; + 45B1EBF9F1D58CCA30CB4004C23CAB1B /* NSString+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Lookin.h"; path = "Src/Main/Shared/Category/NSString+Lookin.h"; sourceTree = ""; }; + 45E56602E74E7A005B70C02489452CA0 /* NSArray+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Lookin.h"; path = "Src/Main/Shared/Category/NSArray+Lookin.h"; sourceTree = ""; }; + 4610C449B2D89871C4723DF50B15525C /* LOTRepeaterRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRepeaterRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h"; sourceTree = ""; }; + 46586766A6BF3CF60E90BEA5447A15C1 /* lottie-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios.release.xcconfig"; sourceTree = ""; }; + 466DAE285C3334F3AE413BE41D981841 /* LKS_ObjectRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_ObjectRegistry.m; path = Src/Main/Server/Others/LKS_ObjectRegistry.m; sourceTree = ""; }; + 47492A13064C3475DCCF32BB8843589D /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 478F7530AAFF5BC9E06831B50C9CCF6C /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; + 47D6E0FBA396AFC71ED9719BED618027 /* AFNetworking-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFNetworking-Info.plist"; sourceTree = ""; }; + 491F20A2F26A8145341552081FC3F5E2 /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CGGeometry+LOTAdditions.m"; path = "lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m"; sourceTree = ""; }; + 4949909C0F4226098058AD880A8C6772 /* LOTRenderGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTRenderGroup.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m"; sourceTree = ""; }; + 4A5743BAAC497A4F53A9E84F3A16F11B /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; + 4A9FE906403E0EF37A9C433441856AE0 /* LKS_CustomAttrModificationHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomAttrModificationHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_CustomAttrModificationHandler.m; sourceTree = ""; }; + 4B8775C78A1A931C6C991432AD53A379 /* UIColor+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+LookinServer.m"; path = "Src/Main/Server/Category/UIColor+LookinServer.m"; sourceTree = ""; }; + 4BBB67CB5AF9CFAB277F233EE23E2A9B /* Lookin_PTChannel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Lookin_PTChannel.m; path = Src/Main/Shared/Peertalk/Lookin_PTChannel.m; sourceTree = ""; }; + 4C17150924CE83F6BA6F1FD6145F7215 /* LOTBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTBezierPath.h; path = "lottie-ios/Classes/Extensions/LOTBezierPath.h"; sourceTree = ""; }; + 4C510DEA5D159BE22C03E3316356C514 /* LOTSizeInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTSizeInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h"; sourceTree = ""; }; + 4C5DC4F3097B42D433DC149C99560B79 /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; + 4DE018365296CA45CD04B4F12ACF79B6 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = ""; }; + 4E9344FADE40145A3D66E9A7809A63E7 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 4ED479666B63A993A473B42BC9964FF5 /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; + 4EF0E2F830509F4888F8585751321D7D /* LKS_InbuiltAttrModificationHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_InbuiltAttrModificationHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_InbuiltAttrModificationHandler.h; sourceTree = ""; }; + 4F40E2A2CFD31DEBCFD012E8AAC7A62E /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; + 4F43874C95D4DEC4EE3D9C90BD47FF28 /* LOTStrokeRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTStrokeRenderer.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m"; sourceTree = ""; }; + 505B6D482600E8CF81BAB5C58BF74C3A /* LookinHierarchyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinHierarchyInfo.m; path = Src/Main/Shared/LookinHierarchyInfo.m; sourceTree = ""; }; + 50F29DD5AEFE9E568F6ACA946F690CAA /* LOTLayerContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTLayerContainer.m; path = "lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m"; sourceTree = ""; }; + 511B766B94F97409E68BCE900C51FBF0 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; + 51206F690E3F9EB32D282C65DD5035A8 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJKeyValue.m"; path = "MJExtension/NSObject+MJKeyValue.m"; sourceTree = ""; }; + 5176C44179911BE6096B6F78D7B0547C /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; + 519155D50D1329095FB54FA510CFD59B /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; + 51BA97E8B5085EFFB47BC9C0B785CEA7 /* lottie-ios */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "lottie-ios"; path = Lottie.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 52008EBCE708172DDA08785A2F800A52 /* LKS_HierarchyDetailsHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_HierarchyDetailsHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_HierarchyDetailsHandler.h; sourceTree = ""; }; + 521A6910A73CED7674A8C2BDACCC5DDE /* LookinServer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LookinServer.release.xcconfig; sourceTree = ""; }; + 523A4FED0C4F689E8EC3539D9AE5C995 /* LOTNumberInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTNumberInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m"; sourceTree = ""; }; 5327DD01C6533D102D66E1636B3827F3 /* Pods-keyBoard-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-keyBoard-acknowledgements.plist"; sourceTree = ""; }; - 54354678DA42B275327F1EABDD57F9BD /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; - 567AA7AB9514E985494C554A1802C03B /* LKS_Helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_Helper.h; path = Src/Main/Server/Others/LKS_Helper.h; sourceTree = ""; }; - 56A3EB69345768D61D52161327AE66C8 /* LookinHierarchyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinHierarchyInfo.m; path = Src/Main/Shared/LookinHierarchyInfo.m; sourceTree = ""; }; - 57BCCC946B3042A20D0C8F15D69FF943 /* MJExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.debug.xcconfig; sourceTree = ""; }; - 58AA57BAA26D8C03E401EEFD3C78271F /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; - 5932D997195DFCB258D366D038A56978 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = ""; }; - 594925FC6BBDEA3002D153F167630F93 /* UIVisualEffectView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIVisualEffectView+LookinServer.h"; path = "Src/Main/Server/Category/UIVisualEffectView+LookinServer.h"; sourceTree = ""; }; - 594BEBF4113035634E37CC4FC2A11D62 /* LookinAttributesGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttributesGroup.m; path = Src/Main/Shared/LookinAttributesGroup.m; sourceTree = ""; }; - 5989AAAB35D0B7EF697456F3897FACEC /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; - 5998234B9DD3C83BCD1DE88EDDEA5DF6 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; - 599EA7E2BEEE9D88C43DF182C6A874D1 /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; - 59AE847A100A8834951E42690C982455 /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; - 59D0E9B54F4868B1B1BDE17140B78250 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; - 5ABD1279233951A8EAE905C43AD033A4 /* LKS_ConnectionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_ConnectionManager.m; path = Src/Main/Server/Connection/LKS_ConnectionManager.m; sourceTree = ""; }; - 5AE5F5B6D6DAD0B45FC2D30EE6FBEE81 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; - 5AF7E49BBE304E0327E319036BE5671B /* UIViewController+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+LookinServer.m"; path = "Src/Main/Server/Category/UIViewController+LookinServer.m"; sourceTree = ""; }; - 5B993C5AF69BCC11CB58D180BE7475BE /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; - 5C0CAD4F0394CDAF40054888E02EB093 /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; - 5C457050D64C2C7287BDFC768D33C9AE /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - 5C7AE763582816CA9E57C0D78A7D1A49 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; - 5CAEE17C08505E0DF4A1EF22D4CAD064 /* MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJExtension-Info.plist"; sourceTree = ""; }; + 5356A35BFB138443252CA3588496940B /* LKS_ExportManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_ExportManager.h; path = Src/Main/Server/Others/LKS_ExportManager.h; sourceTree = ""; }; + 5362B5CFE709D323C58661A555EA0FCD /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; + 536C6C1311D021BE4B3D2FFC4FCAAB4D /* DZNEmptyDataSet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DZNEmptyDataSet.debug.xcconfig; sourceTree = ""; }; + 536D601C9C957D8965AC17CEF27A937B /* LOTKeyframe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTKeyframe.h; path = "lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h"; sourceTree = ""; }; + 538F6F082D2A21D465D72E3F2C96CB37 /* MJPropertyKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyKey.h; path = MJExtension/MJPropertyKey.h; sourceTree = ""; }; + 53BA5165C83D9DBDC9750CCDD4E14723 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; + 54257FD1D30854784D73CB9C2606B617 /* Lookin_PTPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTPrivate.h; path = Src/Main/Shared/Peertalk/Lookin_PTPrivate.h; sourceTree = ""; }; + 557816D4AECF88136ADDDAA4485A49A9 /* LOTLayerGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTLayerGroup.m; path = "lottie-ios/Classes/Models/LOTLayerGroup.m"; sourceTree = ""; }; + 55DCC1828515EB271D17EE801C6ADB75 /* LKS_AttrGroupsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_AttrGroupsMaker.h; path = Src/Main/Server/Others/LKS_AttrGroupsMaker.h; sourceTree = ""; }; + 565EF00A28E7DFCAFB6E2DCC81FBDE7C /* MJRefreshComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshComponent.m; path = MJRefresh/Base/MJRefreshComponent.m; sourceTree = ""; }; + 56D2A0BD8B870DB83C7E0A0BA8CE24D5 /* LOTAnimatedSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimatedSwitch.m; path = "lottie-ios/Classes/Private/LOTAnimatedSwitch.m"; sourceTree = ""; }; + 57F1065D9927A1CEB37170CF303120F8 /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeRectangle.m; path = "lottie-ios/Classes/Models/LOTShapeRectangle.m"; sourceTree = ""; }; + 58EEF31E4381FCF9901BC539FC8B3664 /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; + 593DA693160BD486D8A2B4A95A6508B9 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; + 59A97DA96A702C328BF01C96399051B6 /* LOTComposition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTComposition.h; path = "lottie-ios/Classes/PublicHeaders/LOTComposition.h"; sourceTree = ""; }; + 5A5B6B55042DB42F252D42C32640C375 /* LOTFillRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTFillRenderer.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m"; sourceTree = ""; }; + 5AF7FC3B980CED875CC7772265BF1250 /* MBProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.debug.xcconfig; sourceTree = ""; }; + 5B04AA19A4116D82F80C002622150160 /* LOTCompositionContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTCompositionContainer.h; path = "lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h"; sourceTree = ""; }; + 5B3F44B607D1D315468817C470DBF7B3 /* MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MBProgressHUD-Info.plist"; sourceTree = ""; }; + 5B4B48C725B5559AFC3A087A2E7D5FDF /* LOTValueCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTValueCallback.m; path = "lottie-ios/Classes/Private/LOTValueCallback.m"; sourceTree = ""; }; + 5B664145800977547E0543C1869DEFCB /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; + 5B6EA05154753DC4D375BA1713B9003A /* DZNEmptyDataSet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DZNEmptyDataSet.release.xcconfig; sourceTree = ""; }; + 5B75773FCC1158B46A3C3001E7FDFA8C /* LOTAnimationCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimationCache.h; path = "lottie-ios/Classes/PublicHeaders/LOTAnimationCache.h"; sourceTree = ""; }; + 5B950349F3C1E7FD511BC7E648DEFA23 /* MBProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.release.xcconfig; sourceTree = ""; }; + 5BA260D791EFA8B3B80F3E71C93AACC6 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + 5BBC8EA91BBF38DF80D0B2DD96E175D5 /* DZNEmptyDataSet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DZNEmptyDataSet-dummy.m"; sourceTree = ""; }; + 5C1E102E1297465412CE41FBF6C9375F /* lottie-ios-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-prefix.pch"; sourceTree = ""; }; + 5D51A288C831A6D54E41E17D68FDC10B /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+Compat.h"; path = "lottie-ios/Classes/MacCompatibility/CALayer+Compat.h"; sourceTree = ""; }; 5DA4577FE3BC4A03751108FFED07B385 /* DZNEmptyDataSet */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DZNEmptyDataSet; path = DZNEmptyDataSet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E0CFDE214ACE5F071E4BEEF63BDDCD6 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; - 5E355B215CED31C4C6EF33EEB9E95B38 /* LKS_HierarchyDetailsHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_HierarchyDetailsHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_HierarchyDetailsHandler.h; sourceTree = ""; }; - 5E83988FA8D9C00FAEEA94EE0633C2C5 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; - 5F52BB443191BF5EA87C6419E4BAFFD5 /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; - 613A0EC29C46AFB409483355C45FE1C7 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; - 613D22FE29FDFD98F1BA3415B19FB040 /* LKS_ConnectionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_ConnectionManager.h; path = Src/Main/Server/Connection/LKS_ConnectionManager.h; sourceTree = ""; }; - 615CFF22184D20B3B6107165A49D6FEF /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; - 61A50E7751555885AEB4247687F5DF05 /* DZNEmptyDataSet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DZNEmptyDataSet.debug.xcconfig; sourceTree = ""; }; - 61AA277CF1084D31AAA460D8C1A9BE4E /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; - 61E1874601B077A6F69725D9EF8827B1 /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; - 6289794567935CA3DC8B5C49AEA74043 /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; - 62E02B7B42A91CD6887912774FAE6528 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 63B2D397715E1B3990E46DFCAE0A73D5 /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; + 5DA693F8681513C57B084ED6AFD87D21 /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; }; + 5E1F7E8DBA64017C44ECFE06C9B1CC8D /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; sourceTree = ""; }; + 5E3E1CED1AC0225ABBA7CD840120690D /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; + 5E3E2981EBC22397BB76AF331765E194 /* CALayer+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+Compat.m"; path = "lottie-ios/Classes/MacCompatibility/CALayer+Compat.m"; sourceTree = ""; }; + 5E554DB0C866C88DE26596FE86477B7E /* Masonry-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Masonry-Info.plist"; sourceTree = ""; }; + 5F139A935EDC4C35FBD6F43FD93C0E27 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 5F2624C92BC8C5275C0312A5F15AB651 /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; + 5F54B9BD0AC7DE1FF9332ED5587CD502 /* LOTShapeRectangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeRectangle.h; path = "lottie-ios/Classes/Models/LOTShapeRectangle.h"; sourceTree = ""; }; + 5FC79C5166C2D3221576CB972A1AAA6E /* LookinDisplayItemDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDisplayItemDetail.h; path = Src/Main/Shared/LookinDisplayItemDetail.h; sourceTree = ""; }; + 6026BB762BA16A1209DFA57F8EC18A74 /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimationView_Internal.h; path = "lottie-ios/Classes/Private/LOTAnimationView_Internal.h"; sourceTree = ""; }; + 60473D1A1552535AACA2C9886A6471BA /* MJExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.debug.xcconfig; sourceTree = ""; }; + 608C730FF1F26EE575475575DA2FE17B /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; }; + 608DA2806FEE128BDDA39D7217DAAB7E /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; + 60CEAD00694E0294FFC1464C9E470990 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; + 60F506657CC6F4A87CB4CC4065096FF6 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; + 61FFF7A27CE20B4852E6656680890667 /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; + 6257AF1656068251710E18110E56E409 /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTTransformInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m"; sourceTree = ""; }; + 63462E5F7111A6A05C8005EE2DB1D22E /* NSValue+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+Compat.h"; path = "lottie-ios/Classes/MacCompatibility/NSValue+Compat.h"; sourceTree = ""; }; + 63481D0509749529851E6EBAD855393E /* DZNEmptyDataSet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DZNEmptyDataSet.modulemap; sourceTree = ""; }; + 6362C2F0D448F7CF1E20C133D2F2911F /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 63BF82B0A7DCDD126832EFB503D7AE98 /* DZNEmptyDataSet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DZNEmptyDataSet-Info.plist"; sourceTree = ""; }; 641251D3092FFCF2B6259BF8676A212E /* Pods-CustomKeyboard-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CustomKeyboard-Info.plist"; sourceTree = ""; }; - 650740D8E20A30E70F588321BC583BBC /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; - 667106A3B29FC2624F444E79272C8235 /* LKS_CustomAttrGroupsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomAttrGroupsMaker.m; path = Src/Main/Server/Others/LKS_CustomAttrGroupsMaker.m; sourceTree = ""; }; - 67A65AF14731E6A6CF631892AB163C2D /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; - 68C023D8DAEB5C5E7F36F7020DDBFE63 /* LKS_RequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_RequestHandler.m; path = Src/Main/Server/Connection/LKS_RequestHandler.m; sourceTree = ""; }; - 6A2C339DB0F9EF94544BE6FCDA59F50F /* MJRefreshStateTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m; sourceTree = ""; }; - 6A6FA79B39689AE1D69FBABCD4BB8F7B /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; - 6B21CBEE99C5014F0E0F66C420497FCD /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; - 6CAEA0BC49D62C0D220FA986A5391EEC /* UIImageView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+LookinServer.h"; path = "Src/Main/Server/Category/UIImageView+LookinServer.h"; sourceTree = ""; }; - 6D30CE312289056E4C5788AB47438FED /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; - 6DAD9E82D42212E9D52E28737BC21479 /* LookinHierarchyFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinHierarchyFile.h; path = Src/Main/Shared/LookinHierarchyFile.h; sourceTree = ""; }; - 6E49D88BA109001AA94CB4B1CBCC6353 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; - 6E6089EEBB83334AD3EFA96BE408F86D /* LookinDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDefines.h; path = Src/Main/Shared/LookinDefines.h; sourceTree = ""; }; - 6F10AABF341F29547C8D1C780B3F8861 /* LKS_CustomDisplayItemsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomDisplayItemsMaker.h; path = Src/Main/Server/Others/LKS_CustomDisplayItemsMaker.h; sourceTree = ""; }; - 6FD83C0A67C6DD93C76CB6563151D889 /* LKSConfigManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKSConfigManager.h; path = Src/Main/Server/Others/LKSConfigManager.h; sourceTree = ""; }; - 70E91E9355FAF7D2A8CA2A2112F06A60 /* Bugly.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Bugly.framework; sourceTree = ""; }; - 713E37659AD7D79DA6664C3D3ECF01F7 /* LookinDashboardBlueprint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDashboardBlueprint.h; path = Src/Main/Shared/LookinDashboardBlueprint.h; sourceTree = ""; }; - 71BB52034FF7403843EE79E4975D6D70 /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = ""; }; - 71C7BAB63ED44B881A65C001AA682ADB /* MBProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.release.xcconfig; sourceTree = ""; }; - 743C4A42055B7373FB20F646193D0919 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - 7584B9C7664B986D7C6582FD3280C473 /* UITableView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+LookinServer.m"; path = "Src/Main/Server/Category/UITableView+LookinServer.m"; sourceTree = ""; }; - 7597119135479FEF90DC7CA9DDBF03A6 /* LookinDisplayItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDisplayItem.h; path = Src/Main/Shared/LookinDisplayItem.h; sourceTree = ""; }; - 75E99E8BA24E841D85C9E942E3654D62 /* LookinAttrIdentifiers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttrIdentifiers.m; path = Src/Main/Shared/LookinAttrIdentifiers.m; sourceTree = ""; }; - 785DDFE2F3C7BA8AEDE2278087F506EB /* LookinWeakContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinWeakContainer.h; path = Src/Main/Shared/LookinWeakContainer.h; sourceTree = ""; }; - 79462E533AFF776B12B799A128AA5EE8 /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; - 794882B4F91B9E9B55DD3DF40E04DA22 /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; - 79803C4DAA3D0FB997F7A51AB226B9D7 /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SDWebImage-SDWebImage-Info.plist"; sourceTree = ""; }; - 79E1EEF42DE5E1954630A63B8A5E02B6 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoNormalFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m; sourceTree = ""; }; - 79EEB00E9ED2C742987150EA5E0B1341 /* LKS_AttrModificationPatchHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_AttrModificationPatchHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_AttrModificationPatchHandler.m; sourceTree = ""; }; - 7B54AFD2BD6CA59B1C3B03B1146FE77F /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; - 7BA0DD426F8305DA317D708459ABA12F /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; - 7CB82C5681E372AE74735E8F3B7211E5 /* LKS_EventHandlerMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_EventHandlerMaker.m; path = Src/Main/Server/Others/LKS_EventHandlerMaker.m; sourceTree = ""; }; - 7CBB9E2731CD9B8F896AD9F7398CD3F6 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; - 7D45408149C7FF7C3CD91B6DDBFB7448 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; - 7D5B144E69C677553A95B3CCA57BC43C /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 7DBD5C23623A08CDD875999AA28A1F8D /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; - 7DDE67F73A61A7328413374AFFA92E85 /* LookinStaticAsyncUpdateTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinStaticAsyncUpdateTask.m; path = Src/Main/Shared/LookinStaticAsyncUpdateTask.m; sourceTree = ""; }; + 655E010C4B8E2AC28F2C6694262257E0 /* LookinAutoLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAutoLayoutConstraint.h; path = Src/Main/Shared/LookinAutoLayoutConstraint.h; sourceTree = ""; }; + 65C29A18D472C825E20C2397BC80B427 /* CALayer+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+Lookin.h"; path = "Src/Main/Shared/Category/CALayer+Lookin.h"; sourceTree = ""; }; + 6664F841DDF71FD7E0381AFD23B988B4 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + 66B7F7ECFD89436FBF7A6FE70225F71E /* LOTRepeaterRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTRepeaterRenderer.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m"; sourceTree = ""; }; + 66C4549821E4DC5B1FB23405A2A40518 /* NSValue+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+Compat.m"; path = "lottie-ios/Classes/MacCompatibility/NSValue+Compat.m"; sourceTree = ""; }; + 671323D7DE700F2D9BECEEEEFC4A4928 /* MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtension.h; path = MJExtension/MJExtension.h; sourceTree = ""; }; + 675595D151642547CD310FE30A63A699 /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; + 6759DC459162569720553EB7EB03D4DA /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; + 67B707C443F1C733E296074798607AC1 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + 67E45B07A8C73D258BC721F9424D2BEB /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; + 682F255D431FE7D62FBF3F62694B4D15 /* LOTStrokeRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTStrokeRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h"; sourceTree = ""; }; + 6850A551E126A5896DFA59DAC924879B /* LookinServer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LookinServer-Info.plist"; sourceTree = ""; }; + 6965B9073E9D634DD8C40E407013F155 /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; + 696B681353CC0D5CC37B2FECABDA024D /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; + 6A35608B3374972E80E83CD67BB160D9 /* lottie-ios-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-dummy.m"; sourceTree = ""; }; + 6ADD179A4181B716094A3BA00A722A1C /* LOTAssetGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAssetGroup.h; path = "lottie-ios/Classes/Models/LOTAssetGroup.h"; sourceTree = ""; }; + 6B5378102B2D099A0AA567282D5FB3E1 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJRefresh/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 6BB5AD9626F0C9D627040863D614F047 /* LOTGradientFillRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTGradientFillRender.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h"; sourceTree = ""; }; + 6C34E17880742101DF109A53F45DAE1A /* LKS_Helper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_Helper.m; path = Src/Main/Server/Others/LKS_Helper.m; sourceTree = ""; }; + 6C528A38E039D43F23B098B826864F3D /* LOTModels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTModels.h; path = "lottie-ios/Classes/Models/LOTModels.h"; sourceTree = ""; }; + 6D10B29F985625FD8F32722DA7AB6548 /* LookinDisplayItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDisplayItem.h; path = Src/Main/Shared/LookinDisplayItem.h; sourceTree = ""; }; + 6D2A58A3F59B220AEFF680CFDB7B9FE8 /* LKS_AttrModificationPatchHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_AttrModificationPatchHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_AttrModificationPatchHandler.h; sourceTree = ""; }; + 6E05F80505CCCEF140BF1F42FDAD1661 /* Masonry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Masonry.modulemap; sourceTree = ""; }; + 6E13EE9A7A2D65532A0FFAB73F160C74 /* lottie-ios.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "lottie-ios.modulemap"; sourceTree = ""; }; + 6E4E913EE1CEBB738C3DC03360C898B5 /* SDImageFramePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFramePool.h; path = SDWebImage/Private/SDImageFramePool.h; sourceTree = ""; }; + 6E70A06DB6CF6E8C78B17F928A289B0C /* LOTShapePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapePath.m; path = "lottie-ios/Classes/Models/LOTShapePath.m"; sourceTree = ""; }; + 6EB5EF60FB5747DD4C005BBA2CEC46A5 /* LookinAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttribute.m; path = Src/Main/Shared/LookinAttribute.m; sourceTree = ""; }; + 6ED6845F49525291F386EAAAA319371B /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; + 6F0A1F567AF929A141BB507491CE4DCD /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; + 6F1B3D1B25B8C51A1D1CEAAD09874870 /* LOTFillRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTFillRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h"; sourceTree = ""; }; + 6F1D519909A661AAAF2CDDF1A05EB499 /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; + 6F6F069568EBFAC24459C7196A417B23 /* LOTBezierData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTBezierData.h; path = "lottie-ios/Classes/AnimatableProperties/LOTBezierData.h"; sourceTree = ""; }; + 6F849428C576E3A9468531842BDFB6AD /* LKS_RequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_RequestHandler.h; path = Src/Main/Server/Connection/LKS_RequestHandler.h; sourceTree = ""; }; + 70DFCCB3FF2EEC2229AB04428D470CAA /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + 712B592666A1E34B994121F8C4054715 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; + 7244AF642E95CDEB080A67821F491AB7 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 72A3538489B763F7B56A501FBD3F6DC3 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; + 731C3668315C990ADF87F98E74761A26 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + 7409B8F68BB7F5FE38B11EB1CCB824F7 /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; + 754F007B1AD2FA757DC521D446B39178 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; + 76387329CA57243454030B76DC6A5E11 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; + 76A90BA0FDEB19E5BCD2C7BAA9C0134D /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; + 76B30379A5FC60D096DE28AF1F7FE80F /* SDImageFramePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFramePool.m; path = SDWebImage/Private/SDImageFramePool.m; sourceTree = ""; }; + 77B0F8398C723F548412D9D517A0EF96 /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; + 7860AB8DCEE1B27AFC0F52F691F56817 /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; + 7A36446F389ACA7531C9A4868C788181 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + 7B2D7311C548FE2D75C0EEBC211995A2 /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; + 7BD0D47073F630039201E8CED9FA5AF9 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; + 7BDC97000BCCBCD76929EB4158EABBF7 /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; + 7BEDD7151481C270A240BCBD54C3BD7A /* WKWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WKWebView+AFNetworking.h"; path = "UIKit+AFNetworking/WKWebView+AFNetworking.h"; sourceTree = ""; }; + 7C9E93301A1EC84E6AC23F6D46D2D7DC /* MJRefresh-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-umbrella.h"; sourceTree = ""; }; + 7D163A736430857CD6723C0B841B086F /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimationView.m; path = "lottie-ios/Classes/Private/LOTAnimationView.m"; sourceTree = ""; }; + 7D2735AE63774D5D2365CAE4C9E270E8 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; + 7D9CFD7E8C81DF76A90E065320570722 /* UIViewController+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+LookinServer.m"; path = "Src/Main/Server/Category/UIViewController+LookinServer.m"; sourceTree = ""; }; 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "MJRefresh-MJRefresh.Privacy"; path = MJRefresh.Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 7E82EAB687527F885E79D9835727B3F8 /* LKS_GestureTargetActionsSearcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_GestureTargetActionsSearcher.h; path = Src/Main/Server/Others/LKS_GestureTargetActionsSearcher.h; sourceTree = ""; }; - 7FCB45CBC3B45614560DA456506F73F1 /* LookinAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttribute.m; path = Src/Main/Shared/LookinAttribute.m; sourceTree = ""; }; - 808621872AB88E6448666731EB043018 /* MJExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-umbrella.h"; sourceTree = ""; }; - 80F9F8B5249F11798A805DF46C09F2CA /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; - 80FED7368916E2D1EE8E2B7F26A2618F /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; - 82B53F06F74B4F928AF69994EDA63D71 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; - 832592FA01CF620F64F9CED4966CEA99 /* UIView+WebCacheState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheState.h"; path = "SDWebImage/Core/UIView+WebCacheState.h"; sourceTree = ""; }; - 834B6D6A1ACFBDDF049322F2ED0C17DE /* LKS_CustomAttrModificationHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomAttrModificationHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_CustomAttrModificationHandler.h; sourceTree = ""; }; - 83A4CDCDF549B87D4E437ED8A4615D91 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 84E9E0A3D552DFF9EC45D14794237342 /* Lookin_PTProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Lookin_PTProtocol.m; path = Src/Main/Shared/Peertalk/Lookin_PTProtocol.m; sourceTree = ""; }; - 854F1B8C164960BB0D2721562BD6E7E5 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; + 7E59076D2765A007CBC9044D38AFBB2E /* LookinHierarchyFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinHierarchyFile.m; path = Src/Main/Shared/LookinHierarchyFile.m; sourceTree = ""; }; + 7EA68F387E9D6925383885CD76416F72 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; + 7EA930B7283346D0F5B2C28086A3A09D /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeCircle.m; path = "lottie-ios/Classes/Models/LOTShapeCircle.m"; sourceTree = ""; }; + 802604B240799DBCE659B6A4EF81494F /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; + 805ECAC86B71F29AEECB62A9EB78501F /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; + 8085B19AE051A73AA1175B6A8CA9EDD3 /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; + 80BE1C77426CD4B7145AC8F9C385B53C /* MJRefresh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.release.xcconfig; sourceTree = ""; }; + 81274F7057ADBF76FED3362415EC55DC /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 812ED7B28F0E145819B778744305C5E8 /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; + 82B1F166DB7BFB53CC0B0815CCEDEFCB /* LookinServerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinServerDefines.h; path = Src/Main/Server/Others/LookinServerDefines.h; sourceTree = ""; }; + 82C59133DD7F96F32B51DDFF5BD8B012 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; + 82E3C2374A5253FD68FB4462AC196C71 /* LookinIvarTrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinIvarTrace.h; path = Src/Base/LookinIvarTrace.h; sourceTree = ""; }; + 838A50D9CDFF91A2855B40D1F8A5BE69 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 83AD565A60EEE17150633A9FC960E5B9 /* Lookin_PTUSBHub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Lookin_PTUSBHub.m; path = Src/Main/Shared/Peertalk/Lookin_PTUSBHub.m; sourceTree = ""; }; + 83E24BD1B5A894294D523FC3499D056D /* MJPropertyType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyType.h; path = MJExtension/MJPropertyType.h; sourceTree = ""; }; + 850B2C6C14EBC6E789298096BEF91F35 /* UIView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+LookinServer.h"; path = "Src/Main/Server/Category/UIView+LookinServer.h"; sourceTree = ""; }; + 8574AAF25AF7B49D29319C3DCFE58E9C /* LookinCustomDisplayItemInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinCustomDisplayItemInfo.m; path = Src/Main/Shared/LookinCustomDisplayItemInfo.m; sourceTree = ""; }; + 85A0043427A3E5D610ACCF9BF3E59DC0 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 85F4651A60673FCA78C760D531C07AA2 /* LookinConnectionAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinConnectionAttachment.h; path = Src/Main/Shared/LookinConnectionAttachment.h; sourceTree = ""; }; + 85FF3550CBA0762C4B44F14EA8482B93 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = ""; }; + 8601131B7C9DA6CD3E47B8DE1ABBF3A0 /* CALayer+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+LookinServer.h"; path = "Src/Main/Server/Category/CALayer+LookinServer.h"; sourceTree = ""; }; + 863D84A17942D0E17AC5468211A568A1 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; + 869C7627AB8F6C1A6A1B23147909B2A6 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; 86A260983254EF2D214865E91D3787B2 /* 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; }; - 872090FEDB94946E441D4F936A1357C0 /* LookinIvarTrace.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinIvarTrace.m; path = Src/Base/LookinIvarTrace.m; sourceTree = ""; }; - 87D20D63606C6DC8B53F345069126C44 /* NSObject+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+LookinServer.h"; path = "Src/Main/Server/Category/NSObject+LookinServer.h"; sourceTree = ""; }; - 89023F2C23C8826F172885D263CC29D2 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; - 89485243816A18F41367AE862167C061 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; - 8A299BC446CAAFD89DBF55F51B07F0F4 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; - 8A3DF7C8B0CA95D284475EF487EC6944 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - 8A6D5DE8BC7E18B47355B8494A426209 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; - 8AE06F501FB1F02940458122AC396D62 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 880F12A72861E33FF3013769CFE1A574 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + 88295EA244124CB418613B6CA605F1DE /* LOTCacheProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTCacheProvider.h; path = "lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h"; sourceTree = ""; }; + 88797777ADDC62A67F19032A2211713C /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; + 88B0AB2FFDDF0BA8CF4ABB961544D39B /* UITextView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextView+LookinServer.m"; path = "Src/Main/Server/Category/UITextView+LookinServer.m"; sourceTree = ""; }; + 893CA99CE68216B41DFA983109088F17 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; + 89A41D3BC17523C56CFFEC6FCAB76AB6 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; + 8B47DC622EE4FB6E6AC0FCBFF5CF804F /* LOTShapeGradientFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeGradientFill.m; path = "lottie-ios/Classes/Models/LOTShapeGradientFill.m"; sourceTree = ""; }; 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8BAD239072CC7DFB1FD50FE4374085D1 /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; - 8C9727D0D56A9017D437CA50176F0474 /* Bugly.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugly.release.xcconfig; sourceTree = ""; }; - 8CABC6887E9E2AF4A62642A0C780B4B3 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - 8CD27E7A66F8B685B7056B181A0D4D46 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; - 8E466B1532DEF5F8A8FE002C3882E69E /* WKWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WKWebView+AFNetworking.h"; path = "UIKit+AFNetworking/WKWebView+AFNetworking.h"; sourceTree = ""; }; - 8E6B85BD26EE974026A447B476B2932B /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; - 8F0FAF8AA7D9999CB7B6AC14DC9F613F /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; - 8F715C3F41E2D739BCA20A8ED2E487A1 /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; - 904AEE3BB6B326E7E1CFD8B0A34306AB /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; - 9228BFB339DE3C8FD5163C974AB7DE89 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - 9278559A57D46FAC97B2480A76E574BE /* Color+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Color+Lookin.m"; path = "Src/Main/Shared/Category/Color+Lookin.m"; sourceTree = ""; }; - 929BD46DB08827C3FD713BC0E928C239 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 9324A882B3ED55B3EF9D92D946555583 /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; - 93AFD572FFECC065D5DF0E8764C35B66 /* Lookin_PTChannel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Lookin_PTChannel.m; path = Src/Main/Shared/Peertalk/Lookin_PTChannel.m; sourceTree = ""; }; - 93FB055BA93E62482AD7154A938F761A /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; - 94310BE9068195ADA7842BD0A9A7F782 /* LKS_HierarchyDetailsHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_HierarchyDetailsHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_HierarchyDetailsHandler.m; sourceTree = ""; }; - 9450EAE5D947C741A2403ADD203E1875 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; - 948E1E3EDCE53B021791B9169CCC28BD /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; - 94CD4DB147D9FC14A9FB75335D8AAAF6 /* LookinAttrIdentifiers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttrIdentifiers.h; path = Src/Main/Shared/LookinAttrIdentifiers.h; sourceTree = ""; }; - 94E4D004CAC99A7D4B7144E86418C29C /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; - 960792D55E0D95EDBE31A27683F9FEEF /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; - 96163189CC5AFA5E4E23D6B0B3EADFF7 /* NSObject+MJClass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJClass.h"; path = "MJExtension/NSObject+MJClass.h"; sourceTree = ""; }; - 9641B4F4D8DDE2072CB32BF4C9C2882A /* LookinServer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LookinServer.debug.xcconfig; sourceTree = ""; }; - 964A9667953DC95C883D7E82FD74B649 /* MJExtension-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-prefix.pch"; sourceTree = ""; }; - 9662C23EC2FEA41BE91046E19A928D8C /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; + 8B901955271B5EEB0A054B4C18AAC88A /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 8BD1BBA1F9E37385193AE9DD1A88F8EA /* LKS_EventHandlerMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_EventHandlerMaker.h; path = Src/Main/Server/Others/LKS_EventHandlerMaker.h; sourceTree = ""; }; + 8C36862986DFC4F0116A02192F11CBD6 /* UIImage+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+LookinServer.m"; path = "Src/Main/Server/Category/UIImage+LookinServer.m"; sourceTree = ""; }; + 8D34A5B2E9A897625C6F45474D9F8C1D /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; + 8D6239421DBA2AA663641F9AAB1985B8 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; + 8E4F3A2EE59F965CCB3DFC48563C25E8 /* LKS_GestureTargetActionsSearcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_GestureTargetActionsSearcher.h; path = Src/Main/Server/Others/LKS_GestureTargetActionsSearcher.h; sourceTree = ""; }; + 8E5B849C455471BCDB623C61F8C9A5C6 /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; + 8EC6D6AF46EB8C28B3638A857A4BAD97 /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; }; + 8F77B39DFBF53F077329B8D1EA698FA6 /* LookinTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinTuple.h; path = Src/Main/Shared/LookinTuple.h; sourceTree = ""; }; + 8FF1F22BD601A5F02CD4048EFF2FD327 /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; + 90323AA1DFBAF5BFB10D27B9FABC4094 /* LOTCacheProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTCacheProvider.m; path = "lottie-ios/Classes/Private/LOTCacheProvider.m"; sourceTree = ""; }; + 907D64C007B298D9AB042498DDF5F69D /* LKS_CustomAttrModificationHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomAttrModificationHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_CustomAttrModificationHandler.h; sourceTree = ""; }; + 90CFBF9235075408C904B6DABEEA2F13 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + 91D7986EDBB5C05885421710B2929271 /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; + 91D82FDDD77B5B33B81C33FB2099851C /* LOTLayerContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTLayerContainer.h; path = "lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h"; sourceTree = ""; }; + 9259F078559C2E842E3E823D5BBEA152 /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; + 9265F447C9314627E92134CEBB84E26A /* UIBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UIBezierPath.m; path = "lottie-ios/Classes/MacCompatibility/UIBezierPath.m"; sourceTree = ""; }; + 93193A0E6ED742E3C32B70F716E052AA /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; + 9394975673021D370D4F707E619AF2BF /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; + 94C47D37BDA5FFB3958DA8A59A74D82A /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; + 94E1602E3436C82C60DD50E3CA701878 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; + 94E892DBBFF37C0D4E5768CBB0E4F36E /* LOTArrayInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTArrayInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h"; sourceTree = ""; }; + 94F61108FDF5859A2E8AA134032032C0 /* LOTTrimPathNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTTrimPathNode.m; path = "lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m"; sourceTree = ""; }; + 9593BD74900E6D843CFE9DC5976A8CA8 /* LookinAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttribute.h; path = Src/Main/Shared/LookinAttribute.h; sourceTree = ""; }; 969A9A842778EFB5D62826500DFF4E11 /* Pods-keyBoard-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-keyBoard-dummy.m"; sourceTree = ""; }; - 96D5456A17DF66E262562E8208ADEFF0 /* UIView+WebCacheState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheState.m"; path = "SDWebImage/Core/UIView+WebCacheState.m"; sourceTree = ""; }; - 96E64D1052C3FD60EB6BBB8A95EE1349 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; - 97003D4D841CDDF5214C70A6CC7425DF /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; - 97041A2525062E71B923CEBB11179389 /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; - 9843F03B02D2521214C5C5583A9BBDA3 /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; - 98B6A3897B6D415F51E7F65FD9A20296 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; - 99418F0A943BD9FF46795740F7385472 /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; - 9964200935BD2352FD5DAD8C2AC9FE07 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; - 99F9CF6DCFC4C32DE7AC87FA68FD05DA /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; - 9A522D0661C437F2B97B12A18A3478A1 /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; - 9BF2F8A5A2E35CC31448E86BCF471F49 /* LookinConnectionResponseAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinConnectionResponseAttachment.h; path = Src/Main/Shared/LookinConnectionResponseAttachment.h; sourceTree = ""; }; - 9C6609EE1C9372D5E3C70AF9861CE95D /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; - 9C8E3573AF9C6E24E9DFBDDB57A91B44 /* Lookin_PTUSBHub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Lookin_PTUSBHub.m; path = Src/Main/Shared/Peertalk/Lookin_PTUSBHub.m; sourceTree = ""; }; - 9C9BCDBD08949F0C3053B9F87567E0B2 /* LookinHierarchyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinHierarchyInfo.h; path = Src/Main/Shared/LookinHierarchyInfo.h; sourceTree = ""; }; - 9D58792A3DBAB3667630D1FF53DDFB8D /* LKS_CustomAttrGroupsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomAttrGroupsMaker.h; path = Src/Main/Server/Others/LKS_CustomAttrGroupsMaker.h; sourceTree = ""; }; + 97CFADF49D680679D6078BFE8FB65081 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + 97EFFE2479D724D2D21DC6D71D9380DE /* Image+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Image+Lookin.m"; path = "Src/Main/Shared/Category/Image+Lookin.m"; sourceTree = ""; }; + 982E011815B3BFB8CC0DA38CE9903A44 /* CALayer+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+Lookin.m"; path = "Src/Main/Shared/Category/CALayer+Lookin.m"; sourceTree = ""; }; + 984371CBE2AE756DB942C044D7C2B778 /* LOTShapeTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeTransform.m; path = "lottie-ios/Classes/Models/LOTShapeTransform.m"; sourceTree = ""; }; + 985A0647BFFC83000EDF42EB612CDA60 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; + 98A6230674D154A31BA6EE34F4B218A4 /* LOTColorInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTColorInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m"; sourceTree = ""; }; + 98D860BD18E73B0FFA81C68C7BFC337D /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CGGeometry+LOTAdditions.h"; path = "lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h"; sourceTree = ""; }; + 98E804E7DBEDB67735C5EE9E4C401019 /* LOTPlatformCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPlatformCompat.h; path = "lottie-ios/Classes/MacCompatibility/LOTPlatformCompat.h"; sourceTree = ""; }; + 9970CF11ACB6664D0F8F7D8740612EB5 /* NSObject+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+Lookin.h"; path = "Src/Main/Shared/Category/NSObject+Lookin.h"; sourceTree = ""; }; + 9986D42F8471D0820048BA27C40B1B0E /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; + 99B65B64136C9389CC416F8FDAE36094 /* MJRefreshTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshTrailer.h; path = MJRefresh/Base/MJRefreshTrailer.h; sourceTree = ""; }; + 9ADAD78200CCA86416BFF6F3CD3186B5 /* LOTArrayInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTArrayInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.m"; sourceTree = ""; }; + 9B038BFC1B095F940837959590DA664A /* LKS_RequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_RequestHandler.m; path = Src/Main/Server/Connection/LKS_RequestHandler.m; sourceTree = ""; }; + 9BBC4CE0E6DF98929EACF05DD146C876 /* NSSet+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSSet+Lookin.m"; path = "Src/Main/Shared/Category/NSSet+Lookin.m"; sourceTree = ""; }; + 9BE83F56CECDA4D6CD10D59AAE56456F /* UIBlurEffect+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBlurEffect+LookinServer.h"; path = "Src/Main/Server/Category/UIBlurEffect+LookinServer.h"; sourceTree = ""; }; + 9C8D1ED13B05CDE529BA80C235F5E47F /* NSObject+MJCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJCoding.h"; path = "MJExtension/NSObject+MJCoding.h"; 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; }; - 9D9C32EDDDB1CA2666760FDE90B64590 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; 9DDD0462C32F55EF5E9CB1056459809F /* Pods-CustomKeyboard-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CustomKeyboard-umbrella.h"; sourceTree = ""; }; - 9DFECBD4586BE9AE288AFFA5027A9A24 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; - 9E3D65B846C5EFBA9201404CD8BDC1DA /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; - 9F1EE18C1314EB74EEB6B6392E8EFB08 /* LKS_GestureTargetActionsSearcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_GestureTargetActionsSearcher.m; path = Src/Main/Server/Others/LKS_GestureTargetActionsSearcher.m; sourceTree = ""; }; - 9F2C6DE995A9BCF5E418479898442088 /* NSObject+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+Lookin.h"; path = "Src/Main/Shared/Category/NSObject+Lookin.h"; sourceTree = ""; }; - A054792401E8F9F7BEA8441F9C1DA7C7 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; - A1B6FEE442B47E03714BC3FB94670DCC /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; - A1BB512E1904C9AC07E6CEBA4DE525DB /* LookinDisplayItemDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinDisplayItemDetail.h; path = Src/Main/Shared/LookinDisplayItemDetail.h; sourceTree = ""; }; + 9E27852353DF8343675DE5B16E87CD7B /* LKS_AttrGroupsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_AttrGroupsMaker.m; path = Src/Main/Server/Others/LKS_AttrGroupsMaker.m; sourceTree = ""; }; + 9E30C942904CE23D0B0F44D4333934C5 /* LookinStaticAsyncUpdateTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinStaticAsyncUpdateTask.m; path = Src/Main/Shared/LookinStaticAsyncUpdateTask.m; sourceTree = ""; }; + 9E791076E93327531D61CDE166C6D0F3 /* LOTRenderNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTRenderNode.m; path = "lottie-ios/Classes/RenderSystem/LOTRenderNode.m"; sourceTree = ""; }; + 9E874E62C2BEEB18D79F53EB63CB7B65 /* MJExtensionConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJExtensionConst.m; path = MJExtension/MJExtensionConst.m; sourceTree = ""; }; + 9EADA717AC87F6036492553C299F466D /* MJRefreshNormalTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h; sourceTree = ""; }; + 9EAE4315E539C1E8519CCCC290820AEC /* MJRefreshNormalTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m; sourceTree = ""; }; + 9EC2CE7230178B73AB10D425029B9E7F /* LKS_AttrModificationPatchHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_AttrModificationPatchHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_AttrModificationPatchHandler.m; sourceTree = ""; }; + 9F0ACEA7C94BAFD5533A2014DF10EB89 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; + 9F3FAAEBE4DDBB114C36737DCBDCFC69 /* LKS_GestureTargetActionsSearcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_GestureTargetActionsSearcher.m; path = Src/Main/Server/Others/LKS_GestureTargetActionsSearcher.m; sourceTree = ""; }; + 9F8D59DCF5E42ADBC5FEE5FD7A017666 /* NSObject+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+LookinServer.h"; path = "Src/Main/Server/Category/NSObject+LookinServer.h"; sourceTree = ""; }; + 9FBA40CC299718A9107CD58AD8DF1E96 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJExtension/PrivacyInfo.xcprivacy; sourceTree = ""; }; + A04258711352429161416B5AB0683EFF /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; A2D8E1EB42D41EA6B94901E5B68C9011 /* Pods-keyBoard-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-keyBoard-umbrella.h"; sourceTree = ""; }; - A3048EE57AEE9C3B5FDB98C9E7DF4BB9 /* LookinObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinObject.m; path = Src/Main/Shared/LookinObject.m; sourceTree = ""; }; - A306B5D1B1BD0232E2121BA1E0EA27F9 /* LKS_ExportManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_ExportManager.m; path = Src/Main/Server/Others/LKS_ExportManager.m; sourceTree = ""; }; - A3868E0511721B009DE0A628C978E4AF /* LKS_TraceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_TraceManager.m; path = Src/Main/Server/Others/LKS_TraceManager.m; sourceTree = ""; }; - A3A3B77B219A105E2636BBFACE42D7A8 /* NSString+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MJExtension.m"; path = "MJExtension/NSString+MJExtension.m"; sourceTree = ""; }; - A3CC467742888B5DE59CC393D50BA540 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; - A417B5FC83ECB57A121FCD14A6DD23D3 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; - A4E4BD7B01B4DA8E6A41CD86E6AB6B44 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; + A321AA3CEF6D528E09B6BCCAB073B280 /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimationTransitionController.h; path = "lottie-ios/Classes/PublicHeaders/LOTAnimationTransitionController.h"; sourceTree = ""; }; + A3545CC97FFE23A0786FACE7932EE658 /* LookinConnectionResponseAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinConnectionResponseAttachment.h; path = Src/Main/Shared/LookinConnectionResponseAttachment.h; sourceTree = ""; }; + A395F41796B1CE2361DF4DC1913B4D6A /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; + A43A1A8E34820B27EC0FF37153158388 /* LOTAnimatedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimatedControl.m; path = "lottie-ios/Classes/Private/LOTAnimatedControl.m"; sourceTree = ""; }; + A49601201B530664BB6A82AA1BB75C48 /* LOTCompositionContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTCompositionContainer.m; path = "lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m"; sourceTree = ""; }; + A49F73C4891559F8823A2E496F8A7BE3 /* LOTValueDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTValueDelegate.h; path = "lottie-ios/Classes/PublicHeaders/LOTValueDelegate.h"; sourceTree = ""; }; + A4CF6D4E28861162065F5E9E77AE1E79 /* NSObject+MJCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJCoding.m"; path = "MJExtension/NSObject+MJCoding.m"; sourceTree = ""; }; + A4E961169250B80B0A6D7292D81E1B30 /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A53791C99F3E8789C928D8471E4310AC /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; - A565D25677F6FEEAD298666682CDA4B2 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; - A57C810A36EA495CAFAEDAD83C19A651 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; - A6057C23DD0D9C9A5559F8F0DC47A97D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJRefresh/PrivacyInfo.xcprivacy; sourceTree = ""; }; - A67D546CB537E231FE83AA071A555BB7 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; - A6A924083322C61BD2DC82A438F46687 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - A6B89FBB0AA4A7BD7E16AFF20A519DC2 /* UIImageView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+LookinServer.m"; path = "Src/Main/Server/Category/UIImageView+LookinServer.m"; sourceTree = ""; }; + A4FFCC7F623FB678107B32EE45246B32 /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; + A5CCE872F1B768D7D186A9FA81B107A5 /* ResourceBundle-Lottie-lottie-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Lottie-lottie-ios-Info.plist"; sourceTree = ""; }; + A691F74671359BA6CAC003C770AA9125 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; A6E8FF241173D596A21D4D4B7D86A810 /* Pods-keyBoard.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-keyBoard.release.xcconfig"; sourceTree = ""; }; - A6EB4E3885146B9E8EBACA05C540E733 /* LookinConnectionAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinConnectionAttachment.m; path = Src/Main/Shared/LookinConnectionAttachment.m; sourceTree = ""; }; - A7178BC144BA120067B45EC042E2D156 /* LookinCodingValueType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinCodingValueType.h; path = Src/Main/Shared/LookinCodingValueType.h; sourceTree = ""; }; - A8E1E4CE0CD5AF60097B9523ED2201F8 /* MJRefreshNormalTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h; sourceTree = ""; }; - A99D2B8B886EDA66D95608FD72CE97AF /* CALayer+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+LookinServer.m"; path = "Src/Main/Server/Category/CALayer+LookinServer.m"; sourceTree = ""; }; - AA8F3F4E9CF14305D8C83582492FEA87 /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = ""; }; - AB22EEA7E251269666B0DD8D3FCD0892 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackFooter.m; path = MJRefresh/Base/MJRefreshBackFooter.m; sourceTree = ""; }; - AB362641176A92218B886FD83548F6C2 /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; - AB70C7432DDB8346C9DB4A27C7C7AEEB /* UITextField+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+LookinServer.h"; path = "Src/Main/Server/Category/UITextField+LookinServer.h"; sourceTree = ""; }; - ABCA85AD5553CAA4C58A12223211E18E /* MJRefreshTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshTrailer.m; path = MJRefresh/Base/MJRefreshTrailer.m; sourceTree = ""; }; - ABFE70D35403EBB3D3B8E84170698E30 /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; - AE4708C50A24F74BB9721BF97FDD4782 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; - AEB9B57AEEA7BDF0C696120F4B110F33 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJRefresh.h"; path = "MJRefresh/UIScrollView+MJRefresh.h"; sourceTree = ""; }; - AF4D3A8A4AF29616DFF2E40A94DA00AE /* NSString+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MJExtension.h"; path = "MJExtension/NSString+MJExtension.h"; sourceTree = ""; }; - B00A278D1C0A05DD872C02CEFE3B53AC /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; - B069597AD0812CBF01ACDD3CE4B6F843 /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; + A7253D6026271401CA5BD4DBA6B8D210 /* NSString+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MJExtension.h"; path = "MJExtension/NSString+MJExtension.h"; sourceTree = ""; }; + A72FB198DF157D1DBD45AC2B34B6CC9B /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; + A76EB6E6DE10435AD035A888EE1DE9CB /* NSObject+MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJProperty.m"; path = "MJExtension/NSObject+MJProperty.m"; sourceTree = ""; }; + A7DD3B2EA73461CAB987E5245908721D /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; + A7E87F8A087863F9CC23EE3AD4EE05B5 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; + A7EB235E011B9336A9AB300EF32D9714 /* LKS_ObjectRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_ObjectRegistry.h; path = Src/Main/Server/Others/LKS_ObjectRegistry.h; sourceTree = ""; }; + A87DF1862223389B1D01641A7A9EA306 /* UILabel+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+LookinServer.m"; path = "Src/Main/Server/Category/UILabel+LookinServer.m"; sourceTree = ""; }; + A9435816EE997135BCA2DBC2836F4457 /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = ""; }; + A9911591AEF6DACD65669F35DE7FC796 /* LOTAnimationView_Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimationView_Compat.h; path = "lottie-ios/Classes/PublicHeaders/LOTAnimationView_Compat.h"; sourceTree = ""; }; + A9981422F267218B186F96EBE87E78CD /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; + A9EB92B2CD0DD2858B79BE7561D485D6 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; + A9F64D8209A95F7EDEB2A03CF15FB6F5 /* LOTAnimatorNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimatorNode.m; path = "lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m"; sourceTree = ""; }; + A9F6D2EF67498000316B8E225344818D /* UITableView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+LookinServer.h"; path = "Src/Main/Server/Category/UITableView+LookinServer.h"; sourceTree = ""; }; + A9FF485166EB3A70D8F8D26A6B653B1A /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; + AA8627134477274975DAC7EE73B5A16B /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; + AA99B210CCC1F3D215A774A2CB6F0046 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; + AB336082852242AC0523027278573D0D /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; + AC21C0F972D056C3C453A9A7A48BE015 /* LOTBlockCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTBlockCallback.m; path = "lottie-ios/Classes/Private/LOTBlockCallback.m"; sourceTree = ""; }; + ACEF80D231F2CFD0C04D85BF44B25260 /* lottie-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios.debug.xcconfig"; sourceTree = ""; }; + AE72483304FE178039C2CFD962CFE335 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; + AE794049E484CC97781712EC9E88926F /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; + B0AB5F1118B885FC260AA61EFF770B2C /* UICollectionViewLayout+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewLayout+MJRefresh.m"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.m"; sourceTree = ""; }; B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B12DF9FA146221C01FCE0D22DDBDC890 /* LookinAttrType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttrType.h; path = Src/Main/Shared/LookinAttrType.h; sourceTree = ""; }; - B1A8FD671105727BDE389DF6E59E7187 /* LookinServer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LookinServer-umbrella.h"; sourceTree = ""; }; - B36A499BB6A9A389E077337779129B95 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; - B486D1944AF55BFAF5E8F8CDE6F8EB79 /* MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtension.h; path = MJExtension/MJExtension.h; sourceTree = ""; }; - B4D76F7EB1CE870804724BC071C5ACB3 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; - B640B3AD2FE955C7A51E5B1F84A61189 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; - B6D81E3EC47029DCA820DF6AA652C734 /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; - B6F3F601094A8014DC41447620116D80 /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; - B70FF2E3C927A22C388C16FE8C3F56DB /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; - B7D4D5B8A3207BDAE71FAE9F1B443CBF /* UICollectionViewLayout+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewLayout+MJRefresh.m"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.m"; sourceTree = ""; }; - B9232C2E4F4A27C4FBD3F8EA3E351AF5 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = WebImage/PrivacyInfo.xcprivacy; sourceTree = ""; }; - B985D3DA018E1C8C3AC44ADE702B404B /* MJRefreshConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConfig.h; path = MJRefresh/MJRefreshConfig.h; sourceTree = ""; }; - B9AC91A4E70DD8F8592A5811E8617578 /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; }; - B9E85A8129A4E7BFE16B2262D78F1DCC /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; }; - B9EF838DEDDB795D85E2F065BD697452 /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; - BA48F14A970C2FE9AE9B9A3F4EF27D84 /* NSObject+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+Lookin.m"; path = "Src/Main/Shared/Category/NSObject+Lookin.m"; sourceTree = ""; }; - BB09D1C81119E88D019FD33037BC5587 /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; - BB20479CEB729CCB614B58BD2EFB3BB7 /* MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJProperty.h; path = MJExtension/MJProperty.h; sourceTree = ""; }; - BBC10C6127599FC7CD74CA6E613C44DB /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; - BCE109BED042388EE5FB3949ADA18281 /* MJExtensionConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJExtensionConst.m; path = MJExtension/MJExtensionConst.m; sourceTree = ""; }; - BD3AE781F5CE5DD3063848F6F78DD40B /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = ""; }; - BDD492D9CC4757F16B776F8B08A1A49F /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; - BE6604D8C889F73372398B103D4FF327 /* Masonry-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Masonry-Info.plist"; sourceTree = ""; }; - BF679E0482D915265B5050368ABBB701 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; - BF86BA22A3F81C27DE4346E22477D2CD /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; - C08BFCAD6B6021A9C9686DA64A6CF1AE /* LKS_CustomDisplayItemsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomDisplayItemsMaker.m; path = Src/Main/Server/Others/LKS_CustomDisplayItemsMaker.m; sourceTree = ""; }; - C0AED8CDD333F60946EF309E2D789249 /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; - C23D52958B18447DC5C865BB12951C58 /* UILabel+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+LookinServer.m"; path = "Src/Main/Server/Category/UILabel+LookinServer.m"; sourceTree = ""; }; - C342060C11E55E0DDCC3A84C8C1FBC35 /* MJExtensionConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtensionConst.h; path = MJExtension/MJExtensionConst.h; sourceTree = ""; }; - C4BB81E05861A9C00B09F3A39D27B164 /* LookinServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LookinServer-dummy.m"; sourceTree = ""; }; - C59B65D3E951B3FDACD866C4564C0214 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = ""; }; - C6F66997EF28E05B21EB7F13B379645A /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; - C79FFC2722DEE9A1F54D8DBDD3CB2A2C /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; - C839ECCA7B6B8EF19AFC3658241117C8 /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; - C9154FA9EFF76FE4C993ADDBEB9A5EE4 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; - CA67A34B63E36E76FF453D2ABD613A39 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + B0C2EC8BCDBC5B5B3EF574A6F97CB366 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; + B0C97676D17D86D3A7AEB30E8C2A74CF /* LKS_HierarchyDisplayItemsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_HierarchyDisplayItemsMaker.h; path = Src/Main/Server/Others/LKS_HierarchyDisplayItemsMaker.h; sourceTree = ""; }; + B154036337A385D90E39DDEB774F2198 /* SDCallbackQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCallbackQueue.h; path = SDWebImage/Core/SDCallbackQueue.h; sourceTree = ""; }; + B16B01578F005D590657283A2CE7A9F7 /* LOTAnimatedSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimatedSwitch.h; path = "lottie-ios/Classes/PublicHeaders/LOTAnimatedSwitch.h"; sourceTree = ""; }; + B16B9D03F4DDA52CF705C62F92479EA8 /* LOTComposition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTComposition.m; path = "lottie-ios/Classes/Private/LOTComposition.m"; sourceTree = ""; }; + B198E2A178CD637F898A9FC759F5AF36 /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; + B1B35137892BD8C3891F75903E2B287B /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + B1F343292441688F2BC2B256FC2201BC /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; + B2A7502555BE164EB76A9C6BC6C20F6D /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; + B385616E29C56F1065D513D688A6A283 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; + B3A62AE37BD18B6AA56FA1A3C995376D /* LOTNumberInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTNumberInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h"; sourceTree = ""; }; + B3FFF32CB0A8261DA8DD1B50BC6DCE9F /* LookinCodingValueType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinCodingValueType.h; path = Src/Main/Shared/LookinCodingValueType.h; sourceTree = ""; }; + B4A6075AFD2A762034894457C45650EC /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; + B4E0902E263D01CA193C82577929F839 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; + B5BB06B9629E7573A790AC5CDB462FC7 /* LOTAssetGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAssetGroup.m; path = "lottie-ios/Classes/Models/LOTAssetGroup.m"; sourceTree = ""; }; + B5C7A1209E91236FDFD8AE69DE80B5FD /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; + B79B0CB2219FA6E52F934720669267A1 /* SDCallbackQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCallbackQueue.m; path = SDWebImage/Core/SDCallbackQueue.m; sourceTree = ""; }; + B7E125D544D8518E9D4747BE6FA05A52 /* MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJRefresh-Info.plist"; sourceTree = ""; }; + B7FCB1383A96738408BB53DBC0FAC4EE /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; + B84EE19439FF7648170386C4262C0475 /* MJRefreshTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshTrailer.m; path = MJRefresh/Base/MJRefreshTrailer.m; sourceTree = ""; }; + B85CA0D358A6C59EF8B18ADABE1C975A /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; + B9A8C2D0C0F5CE7BAE1294C2CBCD0398 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; + B9E4E4DB23E3D62978DB3C96EBC232E3 /* LookinAttributesSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttributesSection.m; path = Src/Main/Shared/LookinAttributesSection.m; sourceTree = ""; }; + BA95282A74089DF677AECC11548EC92D /* LKS_CustomDisplayItemsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomDisplayItemsMaker.h; path = Src/Main/Server/Others/LKS_CustomDisplayItemsMaker.h; sourceTree = ""; }; + BAE2E0374B727874C33CF0DE8E025A3E /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; + BC10FCFD9ACA73AAA42A4C6AA4707349 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; + BCEE9F77D163ECC2896D0BA650B77D3A /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; + BD7524C4B5AE206A1B0BA415448A7856 /* NSString+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MJExtension.m"; path = "MJExtension/NSString+MJExtension.m"; sourceTree = ""; }; + BE6317D3454F388D89BF78E6FB60FA53 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; + BEE1C30050F9C1B5AE62C7583A229DFF /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; + BFFE0983F070225A46ABB71E0933410E /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; + C078EA0AA4B6D603C76542BE652008BF /* LookinHierarchyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinHierarchyInfo.h; path = Src/Main/Shared/LookinHierarchyInfo.h; sourceTree = ""; }; + C09E0CE1DFC8AA872B05145C3E28A091 /* NSObject+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+LookinServer.m"; path = "Src/Main/Server/Category/NSObject+LookinServer.m"; sourceTree = ""; }; + C0AAB77E4C420DA681A4BCD59FECD513 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + C13062FDE2308A9D2DF13CA742EB2C4E /* NSObject+MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJProperty.h"; path = "MJExtension/NSObject+MJProperty.h"; sourceTree = ""; }; + C1A6BCD959F17DB2873035971D8D9032 /* LOTMaskContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTMaskContainer.m; path = "lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.m"; sourceTree = ""; }; + C1EDAC4AA18A387C4C2CF424D649014C /* LookinAttrIdentifiers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttrIdentifiers.h; path = Src/Main/Shared/LookinAttrIdentifiers.h; sourceTree = ""; }; + C1FBC9F985B42A93BD8503A205B91979 /* LKS_CustomAttrSetterManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomAttrSetterManager.m; path = Src/Main/Server/Others/LKS_CustomAttrSetterManager.m; sourceTree = ""; }; + C26AFD39A6FD75465E81A0AE96EC820C /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; + C2766BD63788096A153613E7FA57A56E /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; + C28EEAD1B0141A37B9B19F055931FA17 /* LOTShapeGradientFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeGradientFill.h; path = "lottie-ios/Classes/Models/LOTShapeGradientFill.h"; sourceTree = ""; }; + C315D01368F7DE8AEF8F434127941764 /* LKS_TraceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_TraceManager.h; path = Src/Main/Server/Others/LKS_TraceManager.h; sourceTree = ""; }; + C32357BEDFDCCC4A7A7CFA2B54A15C60 /* LookinTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinTuple.m; path = Src/Main/Shared/LookinTuple.m; sourceTree = ""; }; + C3D490AA50814705BBD2B14154A7664B /* LKS_MultiplatformAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_MultiplatformAdapter.m; path = Src/Main/Server/Others/LKS_MultiplatformAdapter.m; sourceTree = ""; }; + C3FA388D423F78D0AE1E89CDFB8EE15D /* Lookin_PTUSBHub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTUSBHub.h; path = Src/Main/Shared/Peertalk/Lookin_PTUSBHub.h; sourceTree = ""; }; + C43C43AE90DC8E686CCA6240A7D78B35 /* UIVisualEffectView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIVisualEffectView+LookinServer.h"; path = "Src/Main/Server/Category/UIVisualEffectView+LookinServer.h"; sourceTree = ""; }; + C45AD5914D7F2D615D3F9C00772CD6DD /* LKS_TraceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_TraceManager.m; path = Src/Main/Server/Others/LKS_TraceManager.m; sourceTree = ""; }; + C480A62A3336487BAE97082368E3258B /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; + C4B89F80EAD4C23CB8FCA2C0DE2DCBE2 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; + C4BB3D2F4DC3D69137636E57BEF94DBE /* MJExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.release.xcconfig; sourceTree = ""; }; + C5EA0EF8AD8CE478D76BBA3591A7CB3A /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; + C643BD492B4B2B42AEE19A95BBBBABDE /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; + C6A761A140C4A617FDABF4AAF51D35D2 /* LOTShapeTrimPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeTrimPath.h; path = "lottie-ios/Classes/Models/LOTShapeTrimPath.h"; sourceTree = ""; }; + C6B72DBBDF9038FC45B98590FFEBA8A8 /* LookinDisplayItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinDisplayItem.m; path = Src/Main/Shared/LookinDisplayItem.m; sourceTree = ""; }; + C6F17BA617ECF7492875C43913307682 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + C72375EC7D8FEC4DB92BB3A0C474BCE2 /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; + C762D70B7920FDB0727888032829A113 /* Bugly.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugly.debug.xcconfig; sourceTree = ""; }; + C7CC056AFEDD46E13A5C7EAD5B08267C /* Lookin_PTProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Lookin_PTProtocol.m; path = Src/Main/Shared/Peertalk/Lookin_PTProtocol.m; sourceTree = ""; }; + C88707F364061CAAEA4FD7BC31BC30C6 /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SDWebImage-SDWebImage-Info.plist"; sourceTree = ""; }; + C8955B6E5F0B69616ECE5ED535BA9EC2 /* UIView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+LookinServer.m"; path = "Src/Main/Server/Category/UIView+LookinServer.m"; sourceTree = ""; }; + C8AF30BA5FCAEFB31CFE6C47D25A915A /* MJPropertyType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyType.m; path = MJExtension/MJPropertyType.m; sourceTree = ""; }; + C9E6B028FFB02F2D9C678B416E0E0D15 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; CAD1D653361EAFCC0E4FFD8252FC1E74 /* Pods-CustomKeyboard.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CustomKeyboard.modulemap"; sourceTree = ""; }; - CAE0A8B09C0AF83117C6BC9602D5D41F /* UITableView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+LookinServer.h"; path = "Src/Main/Server/Category/UITableView+LookinServer.h"; sourceTree = ""; }; - CBCBBB0099A9339A1A8ABBEDF291AF92 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; - CC47954DDA2CCCD6E92132955A0DE728 /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; - CC6EC6E349C4E8476F9617E9150D43FE /* NSObject+MJCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJCoding.h"; path = "MJExtension/NSObject+MJCoding.h"; sourceTree = ""; }; - CDE77633CA7FA3526B2AA79AB5F21A42 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; - CE89275D8F89A11FB2761E0461236313 /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; - CEC88A03608F444860F81FB5EB689938 /* UITextField+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+LookinServer.m"; path = "Src/Main/Server/Category/UITextField+LookinServer.m"; sourceTree = ""; }; + CAD861249B9D25E9864236D2DFDC4D44 /* UIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UIColor.m; path = "lottie-ios/Classes/MacCompatibility/UIColor.m"; sourceTree = ""; }; + CB16B2529A179FB02230F7E909787127 /* LOTKeyframe.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTKeyframe.m; path = "lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m"; sourceTree = ""; }; + CB6A7B26A3B46094E17080056518298B /* UITextView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextView+LookinServer.h"; path = "Src/Main/Server/Category/UITextView+LookinServer.h"; sourceTree = ""; }; + CC07D0B98910CAEB51550360AEBE2927 /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; + CCB70D51423C0005A24CC968EFBF177C /* LOTBezierData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTBezierData.m; path = "lottie-ios/Classes/AnimatableProperties/LOTBezierData.m"; sourceTree = ""; }; + CCD9AF9E05C07333A3773AF6DA3CF95D /* Bugly.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugly.release.xcconfig; sourceTree = ""; }; + CCFF2E54489411070A1C337E3ADAB5FE /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; + CD4FC6550E96D509C66913F5CC2EA900 /* MJRefresh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.debug.xcconfig; sourceTree = ""; }; + CD7B3E4A2E5BE7D5793929F0E0BF3FAF /* LookinAttributeModification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttributeModification.m; path = Src/Main/Shared/LookinAttributeModification.m; sourceTree = ""; }; + CE264DED17C3E3E1051842B8EE95B875 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; + CE5098EE32D614C707923B531CDDE7D7 /* Lookin_PTChannel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTChannel.h; path = Src/Main/Shared/Peertalk/Lookin_PTChannel.h; sourceTree = ""; }; + CF117705B5C8622EFAE4FD550C15E7A6 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; CF1281E58AA1045D4B7F33FC56691C42 /* SDWebImage-SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SDWebImage-SDWebImage"; path = SDWebImage.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; CFBDDF0554D720E199E1094AAEC3D171 /* 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; }; - D03549B19B7C1700178CF12088FCE44C /* LookinTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinTuple.m; path = Src/Main/Shared/LookinTuple.m; sourceTree = ""; }; - D15A23E7684648249EA4D7C312BACC22 /* MJPropertyType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyType.m; path = MJExtension/MJPropertyType.m; sourceTree = ""; }; - D197698AA79A94AD39EC006BBB9D3481 /* MJPropertyKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyKey.h; path = MJExtension/MJPropertyKey.h; sourceTree = ""; }; - D219431FF998A6D0FA270965A4CDE56D /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; - D226F4D7ADA4D7570E831057BF0F25E7 /* MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJRefresh-Info.plist"; sourceTree = ""; }; - D23D41020809113858D4CA46059797CF /* LookinStaticAsyncUpdateTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinStaticAsyncUpdateTask.h; path = Src/Main/Shared/LookinStaticAsyncUpdateTask.h; sourceTree = ""; }; - D2BBA8DCCC9E2658211368C22BE1B033 /* MJRefresh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.debug.xcconfig; sourceTree = ""; }; - D3412473E790C600A01CFF5127EA049C /* MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MBProgressHUD-Info.plist"; sourceTree = ""; }; - D3A9927A87E21A8976D18DC44FE50014 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateHeader.m; path = MJRefresh/Custom/Header/MJRefreshStateHeader.m; sourceTree = ""; }; - D3C9902E0E2D0A78C2A349E20322FC80 /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; - D404BDF65C17843DC41C1611EAAA22EB /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; - D4D2347D4EFB2E5610773AF965AA8399 /* LookinCustomDisplayItemInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinCustomDisplayItemInfo.h; path = Src/Main/Shared/LookinCustomDisplayItemInfo.h; sourceTree = ""; }; - D54A6D034409C4B729B7DBA2D502B89D /* UITextView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextView+LookinServer.m"; path = "Src/Main/Server/Category/UITextView+LookinServer.m"; sourceTree = ""; }; - D5509360DE46CF0B8D64058FE9FD45E8 /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; }; - D601D33EE8BB8396FF4AED582379432E /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; + CFD079B1ED36BF1AE2E2AE9A1553FF27 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; + D0381D5C27B21FC766E7E90B56D44358 /* MJRefreshStateTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m; sourceTree = ""; }; + D073E6FED4775C3235BF126A12EC69F6 /* LKS_InbuiltAttrModificationHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_InbuiltAttrModificationHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_InbuiltAttrModificationHandler.m; sourceTree = ""; }; + D0F813082650C5F50C1BD1187BB78807 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; + D1720047A5DCB4CE5426151172A9CD87 /* LOTShapeRepeater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeRepeater.m; path = "lottie-ios/Classes/Models/LOTShapeRepeater.m"; sourceTree = ""; }; + D206582B10753CC407DA8C884CE7BCC8 /* AFCompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFCompatibilityMacros.h; path = AFNetworking/AFCompatibilityMacros.h; sourceTree = ""; }; + D282562970AE2A018E00D59FFC473E67 /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; + D29E1C72AC9EE36ECCE1AEECB0C775B6 /* Color+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Color+Lookin.m"; path = "Src/Main/Shared/Category/Color+Lookin.m"; sourceTree = ""; }; + D2EE840457EF72B6636A7558D7CA35A7 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; + D2EEF77D3BCC85A25B03E04A84BF16D7 /* UITableView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+LookinServer.m"; path = "Src/Main/Server/Category/UITableView+LookinServer.m"; sourceTree = ""; }; + D34846EAAF5506AE63C9A854D5FDF774 /* LOTShapeCircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeCircle.h; path = "lottie-ios/Classes/Models/LOTShapeCircle.h"; sourceTree = ""; }; + D353E96B6BCDB17BC747EFF7E777C4F0 /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; + D37041B11126460A8298FAD460FE0AB7 /* LKS_ExportManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_ExportManager.m; path = Src/Main/Server/Others/LKS_ExportManager.m; sourceTree = ""; }; + D3E1BBDFB2CD0C8F56D46781C6DB677C /* CALayer+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+LookinServer.m"; path = "Src/Main/Server/Category/CALayer+LookinServer.m"; sourceTree = ""; }; + D43D784C06EA26B53EBA084984DCD356 /* UIView+WebCacheState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheState.m"; path = "SDWebImage/Core/UIView+WebCacheState.m"; sourceTree = ""; }; + D45E540AA99BF8CD5089ED00B94033F7 /* LOTValueCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTValueCallback.h; path = "lottie-ios/Classes/PublicHeaders/LOTValueCallback.h"; sourceTree = ""; }; + D4BF743D5AAC5150CFA4C3D65F74747B /* LOTShapeFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeFill.h; path = "lottie-ios/Classes/Models/LOTShapeFill.h"; sourceTree = ""; }; + D5927150B93BA174C256C7736A8A055A /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; + D5C249C27473B9D78B0AF5AA0AFA0CEA /* MJRefreshStateTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h; sourceTree = ""; }; + D665B0960288F1AB2CAA57C49565BB0F /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; D673941813D9CA4EFFC6C32109054DC5 /* 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; }; - D6A9452B8FC36F44EC5608AB04827703 /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; - D6C233C8BB873C737FFE3E1DFBC2A186 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; - D6E369F88941EA9A46AF58BC88CC0720 /* UIScrollView+EmptyDataSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+EmptyDataSet.h"; path = "Source/UIScrollView+EmptyDataSet.h"; sourceTree = ""; }; D742A7EF918BC67B0884AF366F7415FD /* Pods-CustomKeyboard-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CustomKeyboard-acknowledgements.plist"; sourceTree = ""; }; - D8E5E1F0B039F76947E77470F619AB22 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; - D950E8533947A1D8B1CABC80463AFF52 /* UIBlurEffect+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBlurEffect+LookinServer.m"; path = "Src/Main/Server/Category/UIBlurEffect+LookinServer.m"; sourceTree = ""; }; - D9B1F5912311585292CF1DB19B5FF418 /* MJFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJFoundation.h; path = MJExtension/MJFoundation.h; sourceTree = ""; }; - DB89640D4CA100127D613D0379809B5A /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; - DC3E4B841669D08E886FD8D7A86C654E /* LookinDisplayItemDetail.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinDisplayItemDetail.m; path = Src/Main/Shared/LookinDisplayItemDetail.m; sourceTree = ""; }; + D744D9289D5F0C6D119E52560AA434E9 /* LookinAttributesSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttributesSection.h; path = Src/Main/Shared/LookinAttributesSection.h; sourceTree = ""; }; + D7657C6F513810FF5028EF3C8B02968D /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + D7C529B9A0FFFF11D0D42E675E2EC9D3 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; + D98BB3CC68B7C3491A9F70BC923DB26B /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJKeyValue.h"; path = "MJExtension/NSObject+MJKeyValue.h"; sourceTree = ""; }; + D9FA99E5DFFE40D7DF6135228A675AF6 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; + DA27CEE6903745647DDFE563DA5CFAFD /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; + DA474FD59042ED22158D4CBE9129A6C0 /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; + DA85B6E011624F9A8C4BE9DF73C97D7F /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; + DAAFD65A8B40888BCD17923AC9C82911 /* LookinIvarTrace.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinIvarTrace.m; path = Src/Base/LookinIvarTrace.m; sourceTree = ""; }; + DABD10BFDD200E2871D007BE2C1509CA /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; + DB3F1D530B2E6D3D749981612DF4EF0E /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; + DB5215F8336520B99C1610424CB483BF /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; + DC566A25FB8741D124E279E45C71131A /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; + DC586DD5612C6B4D55021FB5B6650A21 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; + DC66CE51768587BF0EA80B078A703479 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; + DC6DC213043BFCD5FF2737B128B095F8 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; + DC809D5F5A3488A8C92D46C51D8EB140 /* LOTInterpolatorCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTInterpolatorCallback.m; path = "lottie-ios/Classes/Private/LOTInterpolatorCallback.m"; sourceTree = ""; }; DCA062FD08AC9694D8D781B3492421C5 /* Pods-keyBoard */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-keyBoard"; path = Pods_keyBoard.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DCB828210183DADE92F1581FD9DD70FA /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; DCFE00F3CC8CED67258D7F7DD13F3156 /* Pods-keyBoard-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-keyBoard-frameworks.sh"; sourceTree = ""; }; - DD9F495B1E192CA5A7EA012DC8524457 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = ""; }; - DE365B0506D97BB22271ACD3BE9D48CC /* MJExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJExtension.modulemap; sourceTree = ""; }; - DE5E3242D0D245F39B1349B5C4819144 /* LookinAppInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAppInfo.m; path = Src/Main/Shared/LookinAppInfo.m; sourceTree = ""; }; - DE6C055C722C44DA0E562F93906DCD34 /* LKS_EventHandlerMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_EventHandlerMaker.h; path = Src/Main/Server/Others/LKS_EventHandlerMaker.h; sourceTree = ""; }; - DE9EB519F0B4BF7D539877F733F7BCAF /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; - DECAD058B2FE8CD24CC1022B0A1523AB /* LKS_ExportManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_ExportManager.h; path = Src/Main/Server/Others/LKS_ExportManager.h; sourceTree = ""; }; - DF2FF7F81EC1FE20B9F8B3879085D4FA /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = ""; }; - DF383723C6CD6F7B6FCFE6C752DF50AF /* MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJProperty.m; path = MJExtension/MJProperty.m; sourceTree = ""; }; - DF57705B90AB01302C42302B6BB038DD /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; - E05CD820CF8075CB902341061803D784 /* LookinIvarTrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinIvarTrace.h; path = Src/Base/LookinIvarTrace.h; sourceTree = ""; }; - E0E79E8251323154CB271295CCD93D0A /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; - E1C46B6B074DF2D170E6F2ACB5E8C8BA /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; + DD324EBDEE81D99B659A56FDE0AD4F51 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + DD4500370110CE30F38E5EB8141CCF86 /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; + DD4BD5F9BC7ABC0F4807A3F7808B3EE5 /* LOTKeypath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTKeypath.h; path = "lottie-ios/Classes/PublicHeaders/LOTKeypath.h"; sourceTree = ""; }; + DD4ED50F3043D29BF308EA6C5E2D4199 /* LookinConnectionResponseAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinConnectionResponseAttachment.m; path = Src/Main/Shared/LookinConnectionResponseAttachment.m; sourceTree = ""; }; + DD68ECDF497DD8B434F9C7E5B170807B /* LOTTrimPathNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTTrimPathNode.h; path = "lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h"; sourceTree = ""; }; + DE034B8AB59F63BF6F4291EE846A8A98 /* MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJExtension-Info.plist"; sourceTree = ""; }; + DE9C3EEAC553F6D9CDB67DE525CB2E8D /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; + DF190E43FFDCD29D99703A05F818C76C /* UIImageView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+LookinServer.h"; path = "Src/Main/Server/Category/UIImageView+LookinServer.h"; sourceTree = ""; }; + DF3A384C92120AA95174EEA0DED570DF /* LOTShapeStar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeStar.m; path = "lottie-ios/Classes/Models/LOTShapeStar.m"; sourceTree = ""; }; + E07F0A51623D562E50DD3FBE8698C739 /* LOTRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTRadialGradientLayer.m; path = "lottie-ios/Classes/Extensions/LOTRadialGradientLayer.m"; sourceTree = ""; }; + E08B7E8CFE4255500AF5EA1138BE117F /* LOTPathAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPathAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h"; sourceTree = ""; }; + E0BA4270627AD3D7F7A5BAAAD7FE8936 /* Lookin_PTProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lookin_PTProtocol.h; path = Src/Main/Shared/Peertalk/Lookin_PTProtocol.h; sourceTree = ""; }; E1DF8BF780A4AD9606856AB857CA1D86 /* 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; }; - E1E6BDC6A27A05429814F2520B890A63 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; + E1F38216E4EE5B308BE7B8F5275B5828 /* LOTAnimatedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimatedControl.h; path = "lottie-ios/Classes/PublicHeaders/LOTAnimatedControl.h"; sourceTree = ""; }; + E202340452802F3A8D507151653F79B4 /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; E214C17CF404D45BDF92DD6C18D371FA /* Pods-keyBoard-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-keyBoard-acknowledgements.markdown"; sourceTree = ""; }; - E25013592494E49EB3F378AA4A68FB7A /* MJRefreshNormalTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m; sourceTree = ""; }; - E321D3F90B0E3A7E45F64EB551639098 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; - E3ADFF983A9B025AF718C3D24404E480 /* UIView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+LookinServer.m"; path = "Src/Main/Server/Category/UIView+LookinServer.m"; sourceTree = ""; }; - E4000AF0B9EEE3F891ADD766B1967BD3 /* LKS_RequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_RequestHandler.h; path = Src/Main/Server/Connection/LKS_RequestHandler.h; sourceTree = ""; }; + E2B66F3AA881E6E906B8158FA8490545 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; + E2EA7A82A59375A3B3BC245067E1E39D /* LOTPolystarAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTPolystarAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m"; sourceTree = ""; }; + E3B6051B5DBEC45E815939A97BF7BBFC /* LKS_CustomAttrGroupsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomAttrGroupsMaker.h; path = Src/Main/Server/Others/LKS_CustomAttrGroupsMaker.h; sourceTree = ""; }; + E40BE337022C0E201CFD11909AC04A07 /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJRefresh; path = MJRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E5514D264E4855320B70B7010325576C /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; - E5F4E4918198D7216ABDC0BE4C9BFCE9 /* AFCompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFCompatibilityMacros.h; path = AFNetworking/AFCompatibilityMacros.h; sourceTree = ""; }; - E603FC069FE0FF9249D8A7348F6E7795 /* MJRefreshTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshTrailer.h; path = MJRefresh/Base/MJRefreshTrailer.h; sourceTree = ""; }; - E614E7E1FA6658E0B9CF44C05D4E6811 /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; - E66FFAE76E02A3342AF857261F059F70 /* NSObject+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+LookinServer.m"; path = "Src/Main/Server/Category/NSObject+LookinServer.m"; sourceTree = ""; }; - E70A8D54BBD1266CC7CAFB4BD5CE317B /* LookinObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinObject.h; path = Src/Main/Shared/LookinObject.h; sourceTree = ""; }; - E70D2DE5FE013503515AE432AE16071A /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; - E727648E6DB0C84B6B5C85D16CF9D6AC /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - E785CD9E03330FEEAB8EA2F65DA92853 /* LookinTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinTuple.h; path = Src/Main/Shared/LookinTuple.h; sourceTree = ""; }; - E7FE66EE9C43A4BD03E9F354FADF7098 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; - E857EC016B703D1261AC73360907C980 /* CALayer+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+Lookin.h"; path = "Src/Main/Shared/Category/CALayer+Lookin.h"; sourceTree = ""; }; - E91E93486D40A052515660F00B079B5A /* LKS_InbuiltAttrModificationHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_InbuiltAttrModificationHandler.h; path = Src/Main/Server/Connection/RequestHandler/LKS_InbuiltAttrModificationHandler.h; sourceTree = ""; }; - E9ED096883562D4C47E188D0E5CB3065 /* LookinDisplayItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinDisplayItem.m; path = Src/Main/Shared/LookinDisplayItem.m; sourceTree = ""; }; - E9FADEFBF123E3EB09754AA63F0510E1 /* UITextView+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextView+LookinServer.h"; path = "Src/Main/Server/Category/UITextView+LookinServer.h"; sourceTree = ""; }; - EA281F7D07872BD2CB3C821E84CCC544 /* LKS_AttrGroupsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_AttrGroupsMaker.m; path = Src/Main/Server/Others/LKS_AttrGroupsMaker.m; sourceTree = ""; }; - EA4BA3056A1FE6B47E97AA549D4B9423 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - EA5E2A6BFD8D228A6FF7C7C749D642DB /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; - ECA6154AE35962F20A086F5A3633C0CC /* UILabel+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+LookinServer.h"; path = "Src/Main/Server/Category/UILabel+LookinServer.h"; sourceTree = ""; }; - ED216C76AB8BA24D783B6A22E1E01C97 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; - ED6C24AA261BA4AFA4E02DA1EFA44065 /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; - ED81CDC30BE2F7BBA09422B3CD1BDF85 /* Peertalk.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Peertalk.h; path = Src/Main/Shared/Peertalk/Peertalk.h; sourceTree = ""; }; - EE4B0CFE38831013E2F465F169783700 /* UICollectionViewLayout+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewLayout+MJRefresh.h"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.h"; sourceTree = ""; }; - EE96F8DD901EEB1A8375B055EDF7DBBE /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; - EF15AFFA76ECFCE490107F1DEB31BD62 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; - EF2661A0DF69E1828AB8D83F666F4FBC /* MJRefreshComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshComponent.m; path = MJRefresh/Base/MJRefreshComponent.m; sourceTree = ""; }; - EF6193F470BF021CAED5E3E0DC4F602E /* LookinAttributesSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttributesSection.m; path = Src/Main/Shared/LookinAttributesSection.m; sourceTree = ""; }; - EFBFF769FFEA0B2F71A0E5EDE7DCDDF3 /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; - EFD8B43671F8A160934DA73D3C45B4C0 /* LookinHierarchyFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinHierarchyFile.m; path = Src/Main/Shared/LookinHierarchyFile.m; sourceTree = ""; }; - F0BE45EAE3F2E6B703C484173BD9CDAD /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - F14968FDB67455000B5A2C9A77C64B07 /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; - F2087695EC0958A50E2C65A5D2E03159 /* UIImage+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+LookinServer.m"; path = "Src/Main/Server/Category/UIImage+LookinServer.m"; sourceTree = ""; }; - F226E8137EFBE0F2C4ADF98335CAA02A /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; - F2817892F9F21CF8BF9F8F35D58385AD /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; - F299DB132C67105BBC5A78FBCB87FCF2 /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; - F320516E3A699EEF56C411E9C2DA9C29 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJExtension/PrivacyInfo.xcprivacy; sourceTree = ""; }; - F3D6C729EB2C2561DF46F90B1EE029B4 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - F4DCF85783AA9A1B3A613F5BAC3C0FEC /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; - F53768EF8D38709F253FC1C181B05162 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - F53F6F5B0D7E0FF60505964233E5C608 /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; - F57A932DBB8EE96EEDB42899B11A3E40 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; - F61E20013C3B1EBDF05023CF2525C38C /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; - F66C529D67E3A61B55DFF40E581048ED /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; - F68B2B4FABAF7DB3BFD45E81B3302EEE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; - F6908A3C9CC8A527E2C3CB20A2C51560 /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; - F6B25A4160A5D48C609C6C2B58E46DE9 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; - F746B8A0D89C293CD78D1EE71CD25FF1 /* LookinEventHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinEventHandler.h; path = Src/Main/Shared/LookinEventHandler.h; sourceTree = ""; }; - F74FD66E160DEA3B30F3C017DE8ED1BA /* LookinAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttribute.h; path = Src/Main/Shared/LookinAttribute.h; sourceTree = ""; }; - F81A89C6E769F9B774524A9FE4BA70B5 /* UIColor+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+LookinServer.h"; path = "Src/Main/Server/Category/UIColor+LookinServer.h"; sourceTree = ""; }; - F98B3E6FF4A7A436AEB00C4FE95820A2 /* LKS_CustomAttrSetterManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_CustomAttrSetterManager.h; path = Src/Main/Server/Others/LKS_CustomAttrSetterManager.h; sourceTree = ""; }; - F9B85917A028A675DFE95B885791EDFC /* LookinWeakContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinWeakContainer.m; path = Src/Main/Shared/LookinWeakContainer.m; sourceTree = ""; }; - FA1B344071044AFFAABF1077219DEC22 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; - FA2246CD5BC5C3E37CEC58BCA4848181 /* NSSet+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSSet+Lookin.h"; path = "Src/Main/Shared/Category/NSSet+Lookin.h"; sourceTree = ""; }; - FAA44D6FF1A44EB319965DB5E0CC5F73 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; - FAB9874FA4C241C24657D3A825C00C66 /* LKS_AttrGroupsMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_AttrGroupsMaker.h; path = Src/Main/Server/Others/LKS_AttrGroupsMaker.h; sourceTree = ""; }; - FAF1C0B2DCF27A6785AA511B6C9290B9 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; - FB260AFEB0CD406D8CDEDE623A1369CF /* LKS_CustomAttrModificationHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomAttrModificationHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_CustomAttrModificationHandler.m; sourceTree = ""; }; - FBE4C2596FA0518DD6CED29332B75B5B /* DZNEmptyDataSet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DZNEmptyDataSet-umbrella.h"; sourceTree = ""; }; - FC8B5F084763484BB92BA1D312960E45 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = ""; }; - FD1216744C111B10EA2988454A525213 /* LookinAttributeModification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAttributeModification.m; path = Src/Main/Shared/LookinAttributeModification.m; sourceTree = ""; }; - FDD0D2A5CBDCDA5BDF9600C731F95B24 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; - FEBDC1C9F54DE3E90674A96F19B3458A /* LookinServerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinServerDefines.h; path = Src/Main/Server/Others/LookinServerDefines.h; sourceTree = ""; }; - FEE404F0AEA8371C4FCFE3F576AA5835 /* NSArray+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Lookin.h"; path = "Src/Main/Shared/Category/NSArray+Lookin.h"; sourceTree = ""; }; - FF266D90F27C22E50821C68FB0B959D8 /* LKS_ObjectRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKS_ObjectRegistry.h; path = Src/Main/Server/Others/LKS_ObjectRegistry.h; sourceTree = ""; }; - FF5518BA3449B11DB02406C2A9A9AA75 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; - FFD58163B84A00F8FD88E21AE9F6DF12 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; + E5378B0C2C473D252DF9777266E174D1 /* LOTPathInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTPathInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m"; sourceTree = ""; }; + E589E7D85F68B187C941BFE8E5981A01 /* LOTSizeInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTSizeInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m"; sourceTree = ""; }; + E5A48023F7A772224B723167DA19F405 /* LOTMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTMask.m; path = "lottie-ios/Classes/Models/LOTMask.m"; sourceTree = ""; }; + E634E5633F657786B044C2A918E019C9 /* MJFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJFoundation.m; path = MJExtension/MJFoundation.m; sourceTree = ""; }; + E6D32A1FBB11D18DDF0B3E5E4975F7F7 /* LOTCircleAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTCircleAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m"; sourceTree = ""; }; + E7B56BED0A5A58B91DF8C927F2A5A03E /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapeTransform.h; path = "lottie-ios/Classes/Models/LOTShapeTransform.h"; sourceTree = ""; }; + E817C5158801A50C62075BCDB67C7071 /* Image+Lookin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Image+Lookin.h"; path = "Src/Main/Shared/Category/Image+Lookin.h"; sourceTree = ""; }; + E8743680BDAB8E9BF9BBF3C0E2E48C05 /* LookinAttrType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinAttrType.h; path = Src/Main/Shared/LookinAttrType.h; sourceTree = ""; }; + E8B692DF0DBDC1936CDAE65738E9975D /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackFooter.m; path = MJRefresh/Base/MJRefreshBackFooter.m; sourceTree = ""; }; + E8BC47795E8BC62C28A79D8137B783EE /* LOTAnimationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAnimationView.h; path = "lottie-ios/Classes/PublicHeaders/LOTAnimationView.h"; sourceTree = ""; }; + E8F16C0387436C0A7B5DC291FC5EC84C /* UIScrollView+EmptyDataSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+EmptyDataSet.m"; path = "Source/UIScrollView+EmptyDataSet.m"; sourceTree = ""; }; + E8F840BD36B903B27E980AFC9F11A82E /* lottie-ios-Lottie */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "lottie-ios-Lottie"; path = Lottie.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E9681148E66F6D1870DA59EB4F7EB722 /* LOTShapePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTShapePath.h; path = "lottie-ios/Classes/Models/LOTShapePath.h"; sourceTree = ""; }; + E9D1CB4B3ECFB71822CB630EDCE39AC7 /* MJExtension-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-prefix.pch"; sourceTree = ""; }; + EA6014C78AC2633EC05987768E12AB6F /* LookinDashboardBlueprint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinDashboardBlueprint.m; path = Src/Main/Shared/LookinDashboardBlueprint.m; sourceTree = ""; }; + EB2D7C5B5FF1CED8FDA048FA769CD66D /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTAsset.h; path = "lottie-ios/Classes/Models/LOTAsset.h"; sourceTree = ""; }; + EB94BACABEE654AC5908CF98BA271A4D /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; + EBC38AEFD95B5A6302BE5AA3405EC1FE /* LKS_CustomAttrGroupsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_CustomAttrGroupsMaker.m; path = Src/Main/Server/Others/LKS_CustomAttrGroupsMaker.m; sourceTree = ""; }; + ECA0DA9391C203431B6208348838B1C9 /* NSObject+Lookin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+Lookin.m"; path = "Src/Main/Shared/Category/NSObject+Lookin.m"; sourceTree = ""; }; + ECD9216B7DC2A2AF3E77EC7E99E8C8A0 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = ""; }; + ECDB44059BA1D5E4892EF1C33F0559D1 /* UIVisualEffectView+LookinServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIVisualEffectView+LookinServer.m"; path = "Src/Main/Server/Category/UIVisualEffectView+LookinServer.m"; sourceTree = ""; }; + ECEC7FFD61060DE487BE317D1D173EA7 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; + ED44958C71D2C6D449D720D22E09F669 /* LOTHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTHelpers.h; path = "lottie-ios/Classes/Extensions/LOTHelpers.h"; sourceTree = ""; }; + ED49C9E461A9AD6242E9D6C45B28C8F6 /* LookinServer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LookinServer.debug.xcconfig; sourceTree = ""; }; + EE3CB5083DC0F2D78BA99F4749F1B97A /* LKS_EventHandlerMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_EventHandlerMaker.m; path = Src/Main/Server/Others/LKS_EventHandlerMaker.m; sourceTree = ""; }; + EE87085572BA96EB92603E1A53A0E960 /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTShapeGroup.m; path = "lottie-ios/Classes/Models/LOTShapeGroup.m"; sourceTree = ""; }; + EF03E12D45E449C98A8C9255C4D5997B /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; + EF103610E3EA9CE9AD51BD469212581F /* LOTRadialGradientLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTRadialGradientLayer.h; path = "lottie-ios/Classes/Extensions/LOTRadialGradientLayer.h"; sourceTree = ""; }; + EF74EDBD0485FA771A9AA64578456F20 /* LKS_HierarchyDetailsHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_HierarchyDetailsHandler.m; path = Src/Main/Server/Connection/RequestHandler/LKS_HierarchyDetailsHandler.m; sourceTree = ""; }; + EF918B26E800EA757410C452292BB16E /* UIColor+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+LookinServer.h"; path = "Src/Main/Server/Category/UIColor+LookinServer.h"; sourceTree = ""; }; + EFD49AE2AA7E5710A393A5684AA18C1E /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; + F062F7E1CAD4A4E0E2AC47684DBA03D6 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJRefresh.h"; path = "MJRefresh/UIScrollView+MJRefresh.h"; sourceTree = ""; }; + F0F16DAF463965A67C3740345D636C7A /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + F0FA893227558088DD8B6F6B81EC898B /* LookinServer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LookinServer-umbrella.h"; sourceTree = ""; }; + F119DF30C111115619E86829F8ECE934 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; + F211C2870F2278DC285989F15F8DE349 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + F21872DF2B8F1D5F2A76579D75F10148 /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; + F29105585CA9EA4044256AB1FD6F1C26 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; + F35BA59352BD66E5A38B65AB458C6CB8 /* UITextField+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+LookinServer.h"; path = "Src/Main/Server/Category/UITextField+LookinServer.h"; sourceTree = ""; }; + F3868A15C29AC79953551625F15DCFDC /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + F3A9D834D1A902531DB9016EC9D1C032 /* UIImage+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+LookinServer.h"; path = "Src/Main/Server/Category/UIImage+LookinServer.h"; sourceTree = ""; }; + F44212B79C8F78B7273626290DCFE4CF /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; + F5686BE73395FF06B0A656EB2392ACC0 /* Lottie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lottie.h; path = "lottie-ios/Classes/PublicHeaders/Lottie.h"; sourceTree = ""; }; + F58011C4A837239A4C52F123400CF34B /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + F5D20445A4668215A42B54970DB1F581 /* UIColor+Expanded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Expanded.m"; path = "lottie-ios/Classes/Extensions/UIColor+Expanded.m"; sourceTree = ""; }; + F695175209CD6A64659C43174FE4E09D /* LookinHierarchyFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LookinHierarchyFile.h; path = Src/Main/Shared/LookinHierarchyFile.h; sourceTree = ""; }; + F6B2C6B91D32AD5A685ABC034ECE1811 /* LOTPolystarAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTPolystarAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h"; sourceTree = ""; }; + F6C33DE2D8455E40EB1D6F82338CDDBF /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTAnimationCache.m; path = "lottie-ios/Classes/Private/LOTAnimationCache.m"; sourceTree = ""; }; + F6CACAA41BF0E1D35C324D39ED2A0702 /* LOTGradientFillRender.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTGradientFillRender.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m"; sourceTree = ""; }; + F7009EC2BB4D53FDC6C9901C3FFF1BC6 /* UIViewController+LookinServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+LookinServer.h"; path = "Src/Main/Server/Category/UIViewController+LookinServer.h"; sourceTree = ""; }; + F700FF1F501E4E31BEDFD51001DC1382 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; + F7D2581DA723898A6BA1E2D2DC68A987 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; + F80F6E8D3E01737C266F7948E2E99D41 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Lottie/PrivacyInfo.xcprivacy; sourceTree = ""; }; + F8240D78E227CF08269208266B359856 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + F8D452C354CC07110B793509CDC4B8B0 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; + F8FD4D8E7CBA2328A4C35B1959662111 /* LOTColorInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LOTColorInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h"; sourceTree = ""; }; + F9529A4CC737A0D21D97F97AF537442A /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; + F956DD5E7DFC47C6819F4AB8E782091A /* LOTPathAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTPathAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m"; sourceTree = ""; }; + F9E35DF4DD96537E475BF87667EEE6D1 /* LookinAutoLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LookinAutoLayoutConstraint.m; path = Src/Main/Shared/LookinAutoLayoutConstraint.m; sourceTree = ""; }; + FA170CA19720D074821683D051836EBF /* LKS_HierarchyDisplayItemsMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKS_HierarchyDisplayItemsMaker.m; path = Src/Main/Server/Others/LKS_HierarchyDisplayItemsMaker.m; sourceTree = ""; }; + FAA5F1011F517A2F6BA370BA136DDAD1 /* lottie-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "lottie-ios-Info.plist"; sourceTree = ""; }; + FBFBB6274776EF5C0B86FD389D2A9B4A /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; + FC94B8D2FBA4BB61F0F6B44861B426CD /* LOTValueInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTValueInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m"; sourceTree = ""; }; + FCCE9835E4170A085879F19F6504C6BF /* UICollectionViewLayout+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewLayout+MJRefresh.h"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.h"; sourceTree = ""; }; + FDD5DBABF9106A06C5D41FA98F76F3B3 /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; + FDF986FBD2BE8E5315ABD8F7AC77CCAA /* MJExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJExtension-dummy.m"; sourceTree = ""; }; + FE7F34046B9BD8DB88390AC9555EE37E /* LOTPointInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTPointInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m"; sourceTree = ""; }; + FF2F6A3AFF295DD9D127E392996B5A22 /* LOTLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LOTLayer.m; path = "lottie-ios/Classes/Models/LOTLayer.m"; sourceTree = ""; }; + FF9559E18864B7A1C6A0D330DBE11FF9 /* lottie-ios-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-umbrella.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0DE7FCDD6C04EC4E1E9ECB00A0604FB7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 11690A588400BBB164423D5F86311C35 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1146,6 +1428,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 18CA2D935E3617DC0D597DAEBF859E9C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 37145BAEB1B97BA7ADD7D6C3E86E99BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1163,7 +1452,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 68405B5F41E04D755317E63849131904 /* Frameworks */ = { + 5EDDE57D90E5605FA0AEBF9883FDAB1D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 74AFAC404B3A207829AA53AB25A4BE3E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -1187,18 +1483,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A12778F5B92D79BB1CB466B6E7808C73 /* Frameworks */ = { + A7DA7233D8A35EF3A8BBC2E77C158B54 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AC60AAEBCF4A484AB8DAD9EBCA30DBD7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1EE04FF3866D1CDDBEFEBA7F795824AD /* Foundation.framework in Frameworks */, + D2DBC1B19438A9B9EF72764BE7934312 /* Foundation.framework in Frameworks */, + 2A68213B3875591AE2BB405CAEE01E25 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1212,6 +1502,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + CB94216522549F91CDBE0581C641FF14 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; D04C3487CC66436E0AC1085019C1D36C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1229,270 +1526,267 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + ED82ACB4CEF5A024DE2B25EA4F613C6A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F061785B349C67B1EFC3FC98EE7D70B0 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 004BCCE6E90EA8F999F5DD21EFC4736A /* Support Files */ = { + 04C25B5B06F8693D55AF59061EAFC65F /* LookinServer */ = { isa = PBXGroup; children = ( - 0CE9804DA47B24CF925450C7924EF999 /* Masonry.modulemap */, - E321D3F90B0E3A7E45F64EB551639098 /* Masonry-dummy.m */, - BE6604D8C889F73372398B103D4FF327 /* Masonry-Info.plist */, - D8E5E1F0B039F76947E77470F619AB22 /* Masonry-prefix.pch */, - 31C3AFC445B760812F9E6924ABB9CC15 /* Masonry-umbrella.h */, - B9AC91A4E70DD8F8592A5811E8617578 /* Masonry.debug.xcconfig */, - F53F6F5B0D7E0FF60505964233E5C608 /* Masonry.release.xcconfig */, + 1D8E015E440372936BA652410326AE19 /* Core */, + D055DA6A5D7F1BEE0C6666800EF18325 /* Support Files */, + ); + name = LookinServer; + path = LookinServer; + sourceTree = ""; + }; + 073A3A8850E4AF78DA9992B552621F06 /* NSURLSession */ = { + isa = PBXGroup; + children = ( + D206582B10753CC407DA8C884CE7BCC8 /* AFCompatibilityMacros.h */, + 731C3668315C990ADF87F98E74761A26 /* AFHTTPSessionManager.h */, + 4E9344FADE40145A3D66E9A7809A63E7 /* AFHTTPSessionManager.m */, + DD324EBDEE81D99B659A56FDE0AD4F51 /* AFURLSessionManager.h */, + F0F16DAF463965A67C3740345D636C7A /* AFURLSessionManager.m */, + ); + name = NSURLSession; + sourceTree = ""; + }; + 0848049023E63D9D339EA99F26E8FD7E /* Support Files */ = { + isa = PBXGroup; + children = ( + 6E05F80505CCCEF140BF1F42FDAD1661 /* Masonry.modulemap */, + 30A9947185CE475FEBC98A47A30A4C30 /* Masonry-dummy.m */, + 5E554DB0C866C88DE26596FE86477B7E /* Masonry-Info.plist */, + 44F1C2F29BE259740E3D14869F4FA2D4 /* Masonry-prefix.pch */, + 3628C45AD1D63F88BECAB6047AEA970F /* Masonry-umbrella.h */, + 608C730FF1F26EE575475575DA2FE17B /* Masonry.debug.xcconfig */, + 478F7530AAFF5BC9E06831B50C9CCF6C /* Masonry.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/Masonry"; sourceTree = ""; }; - 055E201C6FE65C14750CE007D95094C3 /* DZNEmptyDataSet */ = { + 114F055FC48526BE107F3570A713DBBC /* Serialization */ = { isa = PBXGroup; children = ( - D6E369F88941EA9A46AF58BC88CC0720 /* UIScrollView+EmptyDataSet.h */, - 1C3AD08A39781246EBAC23F5B8A9BDD3 /* UIScrollView+EmptyDataSet.m */, - 6CE3F18721CC834AA1D80F2A9F218CA5 /* Support Files */, + C0AAB77E4C420DA681A4BCD59FECD513 /* AFURLRequestSerialization.h */, + 2DD74F97D4DA32C882FEDE95C5EBB8EE /* AFURLRequestSerialization.m */, + 880F12A72861E33FF3013769CFE1A574 /* AFURLResponseSerialization.h */, + 3749B43BEC208D26F5E83E6A22AE3271 /* AFURLResponseSerialization.m */, ); - name = DZNEmptyDataSet; - path = DZNEmptyDataSet; + name = Serialization; sourceTree = ""; }; - 139D61AB9CCEA3CD3FE43AE8F0DFA14F /* Support Files */ = { + 1A6DCADEA52AA2C98AC632764268D587 /* MBProgressHUD */ = { isa = PBXGroup; children = ( - 79803C4DAA3D0FB997F7A51AB226B9D7 /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */, - 504A6EFB974AF03849BCBDD8A6C0A198 /* SDWebImage.modulemap */, - EA4BA3056A1FE6B47E97AA549D4B9423 /* SDWebImage-dummy.m */, - 107E924936A407875330C174B34260AC /* SDWebImage-Info.plist */, - 25391D44BC144DD932559C9E9069347F /* SDWebImage-prefix.pch */, - 037A3F50C10BD2A3B9D2C3743608A737 /* SDWebImage-umbrella.h */, - 5998234B9DD3C83BCD1DE88EDDEA5DF6 /* SDWebImage.debug.xcconfig */, - 0C31E11F6B40D55EB650013FAC1B59C0 /* SDWebImage.release.xcconfig */, + 70DFCCB3FF2EEC2229AB04428D470CAA /* MBProgressHUD.h */, + 5BA260D791EFA8B3B80F3E71C93AACC6 /* MBProgressHUD.m */, + 4301E5C3334864D6B292DA68937D79E2 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = MBProgressHUD; + path = MBProgressHUD; sourceTree = ""; }; - 1C8A19406FF58E9BA6BC427CA02E9857 /* Products */ = { + 1D8E015E440372936BA652410326AE19 /* Core */ = { isa = PBXGroup; children = ( - A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */, - 5DA4577FE3BC4A03751108FFED07B385 /* DZNEmptyDataSet */, - 25664483ABF4DC8EC03E7472AA04333B /* LookinServer */, - 1FFED36A657123030ABB700256D73F15 /* Masonry */, - 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */, - 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */, - 43EAAD2AB7E6B407E80E95F643F93D22 /* MJExtension-MJExtension */, - E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */, - 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */, - 0B4AAC15A428CDC2A62AF9CC27BEA609 /* Pods-CustomKeyboard */, - DCA062FD08AC9694D8D781B3492421C5 /* Pods-keyBoard */, - B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */, - CF1281E58AA1045D4B7F33FC56691C42 /* SDWebImage-SDWebImage */, - ); - name = Products; - sourceTree = ""; - }; - 1DF4B2EDEE04858C6D572415F9FFA5F7 /* Core */ = { - isa = PBXGroup; - children = ( - F2817892F9F21CF8BF9F8F35D58385AD /* NSBezierPath+SDRoundedCorners.h */, - 8BAD239072CC7DFB1FD50FE4374085D1 /* NSBezierPath+SDRoundedCorners.m */, - 1110127348EF0DD2FF03A68A13D86895 /* NSButton+WebCache.h */, - 613A0EC29C46AFB409483355C45FE1C7 /* NSButton+WebCache.m */, - 7DBD5C23623A08CDD875999AA28A1F8D /* NSData+ImageContentType.h */, - 17422A39378973466DCE06FB6ADA832E /* NSData+ImageContentType.m */, - CC47954DDA2CCCD6E92132955A0DE728 /* NSImage+Compatibility.h */, - 5B993C5AF69BCC11CB58D180BE7475BE /* NSImage+Compatibility.m */, - 2BA061B3651D9243CBD96694626B95C1 /* SDAnimatedImage.h */, - 8CD27E7A66F8B685B7056B181A0D4D46 /* SDAnimatedImage.m */, - 9A522D0661C437F2B97B12A18A3478A1 /* SDAnimatedImagePlayer.h */, - 6D30CE312289056E4C5788AB47438FED /* SDAnimatedImagePlayer.m */, - 33E548EC20D55A1581EF030D8F590720 /* SDAnimatedImageRep.h */, - 8A299BC446CAAFD89DBF55F51B07F0F4 /* SDAnimatedImageRep.m */, - DB89640D4CA100127D613D0379809B5A /* SDAnimatedImageView.h */, - 6B21CBEE99C5014F0E0F66C420497FCD /* SDAnimatedImageView.m */, - 241065D9A03A30BC61C328A01C40E560 /* SDAnimatedImageView+WebCache.h */, - 48A9A2DE85C1D87BCD354418BAF78749 /* SDAnimatedImageView+WebCache.m */, - B9EF838DEDDB795D85E2F065BD697452 /* SDAssociatedObject.h */, - 3D7966DEA2CA0101B9FC2C01A1A2909B /* SDAssociatedObject.m */, - BDD492D9CC4757F16B776F8B08A1A49F /* SDAsyncBlockOperation.h */, - E70D2DE5FE013503515AE432AE16071A /* SDAsyncBlockOperation.m */, - 19F3928D9276C0125AA1EBDB31A470E1 /* SDCallbackQueue.h */, - 13D448A155C957ECCF95DC54FBE28569 /* SDCallbackQueue.m */, - F4DCF85783AA9A1B3A613F5BAC3C0FEC /* SDDeviceHelper.h */, - 4D2D491E6C287C5C66C4EF6B165E85BD /* SDDeviceHelper.m */, - 5F52BB443191BF5EA87C6419E4BAFFD5 /* SDDiskCache.h */, - D6C233C8BB873C737FFE3E1DFBC2A186 /* SDDiskCache.m */, - 25AADAD73C32FC4E150A4A19780980C4 /* SDDisplayLink.h */, - F14968FDB67455000B5A2C9A77C64B07 /* SDDisplayLink.m */, - 599EA7E2BEEE9D88C43DF182C6A874D1 /* SDFileAttributeHelper.h */, - 4223ACF818570B18B88D6B2884075BF1 /* SDFileAttributeHelper.m */, - 4E7FA66C9DDB6507631DF1F179557C4A /* SDGraphicsImageRenderer.h */, - 9843F03B02D2521214C5C5583A9BBDA3 /* SDGraphicsImageRenderer.m */, - BF679E0482D915265B5050368ABBB701 /* SDImageAPNGCoder.h */, - F6908A3C9CC8A527E2C3CB20A2C51560 /* SDImageAPNGCoder.m */, - 5E0CFDE214ACE5F071E4BEEF63BDDCD6 /* SDImageAssetManager.h */, - 1CA256AA8704AE9F135214714BAFF153 /* SDImageAssetManager.m */, - 93FB055BA93E62482AD7154A938F761A /* SDImageAWebPCoder.h */, - 0AF433E9D2C6355E77FFBE3AC3CB5B3A /* SDImageAWebPCoder.m */, - 34206822AA40B77DF3E1B3B5D326158F /* SDImageCache.h */, - 3D6CF72BA8B7618D0238AD641B57FE35 /* SDImageCache.m */, - 1F43D293502C6A280429EF2DEFA6C0E6 /* SDImageCacheConfig.h */, - 4770EEEC71445F1C55A5C71E32517009 /* SDImageCacheConfig.m */, - 3CA1F0AA7C906C09D35E1B3B781EB6E0 /* SDImageCacheDefine.h */, - C839ECCA7B6B8EF19AFC3658241117C8 /* SDImageCacheDefine.m */, - 99F9CF6DCFC4C32DE7AC87FA68FD05DA /* SDImageCachesManager.h */, - A3CC467742888B5DE59CC393D50BA540 /* SDImageCachesManager.m */, - AB362641176A92218B886FD83548F6C2 /* SDImageCachesManagerOperation.h */, - A1B6FEE442B47E03714BC3FB94670DCC /* SDImageCachesManagerOperation.m */, - 2FE87671299E95720DB52DD3375B566E /* SDImageCoder.h */, - 12F12865FFC70E396EDFB92C4A7F13D7 /* SDImageCoder.m */, - FF5518BA3449B11DB02406C2A9A9AA75 /* SDImageCoderHelper.h */, - A57C810A36EA495CAFAEDAD83C19A651 /* SDImageCoderHelper.m */, - 89023F2C23C8826F172885D263CC29D2 /* SDImageCodersManager.h */, - 97041A2525062E71B923CEBB11179389 /* SDImageCodersManager.m */, - 1FC42F03931384EE2605E5C1FF575608 /* SDImageFrame.h */, - B6F3F601094A8014DC41447620116D80 /* SDImageFrame.m */, - 148FDB67C55B5854E979447E82AFD54E /* SDImageFramePool.h */, - 131863AC3A27979CE5BF1B35EB9C1CED /* SDImageFramePool.m */, - 8F0FAF8AA7D9999CB7B6AC14DC9F613F /* SDImageGIFCoder.h */, - E5514D264E4855320B70B7010325576C /* SDImageGIFCoder.m */, - 89485243816A18F41367AE862167C061 /* SDImageGraphics.h */, - ED6C24AA261BA4AFA4E02DA1EFA44065 /* SDImageGraphics.m */, - 67A65AF14731E6A6CF631892AB163C2D /* SDImageHEICCoder.h */, - 9D9C32EDDDB1CA2666760FDE90B64590 /* SDImageHEICCoder.m */, - BF86BA22A3F81C27DE4346E22477D2CD /* SDImageIOAnimatedCoder.h */, - 5C0CAD4F0394CDAF40054888E02EB093 /* SDImageIOAnimatedCoder.m */, - 9662C23EC2FEA41BE91046E19A928D8C /* SDImageIOAnimatedCoderInternal.h */, - B00A278D1C0A05DD872C02CEFE3B53AC /* SDImageIOCoder.h */, - E1E6BDC6A27A05429814F2520B890A63 /* SDImageIOCoder.m */, - 97003D4D841CDDF5214C70A6CC7425DF /* SDImageLoader.h */, - 2254BB0E1CAB331C712E8819CE1CEBA9 /* SDImageLoader.m */, - 9964200935BD2352FD5DAD8C2AC9FE07 /* SDImageLoadersManager.h */, - D601D33EE8BB8396FF4AED582379432E /* SDImageLoadersManager.m */, - BD3AE781F5CE5DD3063848F6F78DD40B /* SDImageTransformer.h */, - DF57705B90AB01302C42302B6BB038DD /* SDImageTransformer.m */, - 8F715C3F41E2D739BCA20A8ED2E487A1 /* SDInternalMacros.h */, - DE9EB519F0B4BF7D539877F733F7BCAF /* SDInternalMacros.m */, - 24998A1052F45827E4FFAFAF7FA1542E /* SDMemoryCache.h */, - 59D0E9B54F4868B1B1BDE17140B78250 /* SDMemoryCache.m */, - 79462E533AFF776B12B799A128AA5EE8 /* SDmetamacros.h */, - EF15AFFA76ECFCE490107F1DEB31BD62 /* SDWeakProxy.h */, - FFD58163B84A00F8FD88E21AE9F6DF12 /* SDWeakProxy.m */, - 5248A2EBBCEB19A0BBFA557B594E2DEA /* SDWebImage.h */, - DF2FF7F81EC1FE20B9F8B3879085D4FA /* SDWebImageCacheKeyFilter.h */, - 960792D55E0D95EDBE31A27683F9FEEF /* SDWebImageCacheKeyFilter.m */, - 794882B4F91B9E9B55DD3DF40E04DA22 /* SDWebImageCacheSerializer.h */, - 42189E436FCC0F9F0BAA536F3BF84910 /* SDWebImageCacheSerializer.m */, - CBCBBB0099A9339A1A8ABBEDF291AF92 /* SDWebImageCompat.h */, - 299CDB086FE0568EE14EAB79D7B74437 /* SDWebImageCompat.m */, - 01E24F0E64AEC0E54DBDB063CE89097A /* SDWebImageDefine.h */, - 0370FDB753906B18C1B9AFB8BE7D213C /* SDWebImageDefine.m */, - 9C6609EE1C9372D5E3C70AF9861CE95D /* SDWebImageDownloader.h */, - 94E4D004CAC99A7D4B7144E86418C29C /* SDWebImageDownloader.m */, - 99418F0A943BD9FF46795740F7385472 /* SDWebImageDownloaderConfig.h */, - 2A5A249D6ED704F9FEE1FFBC9B61426F /* SDWebImageDownloaderConfig.m */, - 15EEB72FE94B15511A9B077601BFC002 /* SDWebImageDownloaderDecryptor.h */, - F226E8137EFBE0F2C4ADF98335CAA02A /* SDWebImageDownloaderDecryptor.m */, - 929BD46DB08827C3FD713BC0E928C239 /* SDWebImageDownloaderOperation.h */, - 0C5C306F08907FB9E1301EA07220C6EB /* SDWebImageDownloaderOperation.m */, - ED216C76AB8BA24D783B6A22E1E01C97 /* SDWebImageDownloaderRequestModifier.h */, - 2AEE1DAEE2CD1BAB6DBCBC50916263A4 /* SDWebImageDownloaderRequestModifier.m */, - F6B25A4160A5D48C609C6C2B58E46DE9 /* SDWebImageDownloaderResponseModifier.h */, - 15D08EB14955AB2B841A5E9E16D8D4AE /* SDWebImageDownloaderResponseModifier.m */, - EE96F8DD901EEB1A8375B055EDF7DBBE /* SDWebImageError.h */, - CE89275D8F89A11FB2761E0461236313 /* SDWebImageError.m */, - B6D81E3EC47029DCA820DF6AA652C734 /* SDWebImageIndicator.h */, - 54354678DA42B275327F1EABDD57F9BD /* SDWebImageIndicator.m */, - 5C7AE763582816CA9E57C0D78A7D1A49 /* SDWebImageManager.h */, - 036896A95CE28AB066292A03BAD2BFFA /* SDWebImageManager.m */, - 0BF41BBB1EBC1FE4F91BE320D947ED64 /* SDWebImageOperation.h */, - EFBFF769FFEA0B2F71A0E5EDE7DCDDF3 /* SDWebImageOperation.m */, - C0AED8CDD333F60946EF309E2D789249 /* SDWebImageOptionsProcessor.h */, - AE4708C50A24F74BB9721BF97FDD4782 /* SDWebImageOptionsProcessor.m */, - 5E83988FA8D9C00FAEEA94EE0633C2C5 /* SDWebImagePrefetcher.h */, - CDE77633CA7FA3526B2AA79AB5F21A42 /* SDWebImagePrefetcher.m */, - 3BF9DE6E63B2A31CC1EADA84D3E42E7A /* SDWebImageTransition.h */, - 4819E2A59EFDCF27B3C3DDB40C7B2D13 /* SDWebImageTransition.m */, - 9E3D65B846C5EFBA9201404CD8BDC1DA /* SDWebImageTransitionInternal.h */, - 615CFF22184D20B3B6107165A49D6FEF /* UIButton+WebCache.h */, - FC8B5F084763484BB92BA1D312960E45 /* UIButton+WebCache.m */, - D6A9452B8FC36F44EC5608AB04827703 /* UIColor+SDHexString.h */, - F299DB132C67105BBC5A78FBCB87FCF2 /* UIColor+SDHexString.m */, - 7B54AFD2BD6CA59B1C3B03B1146FE77F /* UIImage+ExtendedCacheData.h */, - 71BB52034FF7403843EE79E4975D6D70 /* UIImage+ExtendedCacheData.m */, - 2A67F3F63FB3C05544B8F66F7ED89E74 /* UIImage+ForceDecode.h */, - BB09D1C81119E88D019FD33037BC5587 /* UIImage+ForceDecode.m */, - 2DFD54923DA02EA135A1A1E2F56CBDE1 /* UIImage+GIF.h */, - 3D64DD7369F8D81EDC16FC3539F46D73 /* UIImage+GIF.m */, - 80FED7368916E2D1EE8E2B7F26A2618F /* UIImage+MemoryCacheCost.h */, - F66C529D67E3A61B55DFF40E581048ED /* UIImage+MemoryCacheCost.m */, - E614E7E1FA6658E0B9CF44C05D4E6811 /* UIImage+Metadata.h */, - 0FD3FF7FA5E997D3DDAB5C272F8734A6 /* UIImage+Metadata.m */, - C59B65D3E951B3FDACD866C4564C0214 /* UIImage+MultiFormat.h */, - 7CBB9E2731CD9B8F896AD9F7398CD3F6 /* UIImage+MultiFormat.m */, - AA8F3F4E9CF14305D8C83582492FEA87 /* UIImage+Transform.h */, - DD9F495B1E192CA5A7EA012DC8524457 /* UIImage+Transform.m */, - 3996B697C00897DAFE1DFD73DAA4E114 /* UIImageView+HighlightedWebCache.h */, - F0BE45EAE3F2E6B703C484173BD9CDAD /* UIImageView+HighlightedWebCache.m */, - 9DFECBD4586BE9AE288AFFA5027A9A24 /* UIImageView+WebCache.h */, - FA1B344071044AFFAABF1077219DEC22 /* UIImageView+WebCache.m */, - 98B6A3897B6D415F51E7F65FD9A20296 /* UIView+WebCache.h */, - FAA44D6FF1A44EB319965DB5E0CC5F73 /* UIView+WebCache.m */, - C9154FA9EFF76FE4C993ADDBEB9A5EE4 /* UIView+WebCacheOperation.h */, - 8AE06F501FB1F02940458122AC396D62 /* UIView+WebCacheOperation.m */, - 832592FA01CF620F64F9CED4966CEA99 /* UIView+WebCacheState.h */, - 96D5456A17DF66E262562E8208ADEFF0 /* UIView+WebCacheState.m */, - F364D65121D8297BD4970B4E36B87837 /* Resources */, + 65C29A18D472C825E20C2397BC80B427 /* CALayer+Lookin.h */, + 982E011815B3BFB8CC0DA38CE9903A44 /* CALayer+Lookin.m */, + 8601131B7C9DA6CD3E47B8DE1ABBF3A0 /* CALayer+LookinServer.h */, + D3E1BBDFB2CD0C8F56D46781C6DB677C /* CALayer+LookinServer.m */, + 39EAB7B8BB80BFCF4A6C703116F64865 /* Color+Lookin.h */, + D29E1C72AC9EE36ECCE1AEECB0C775B6 /* Color+Lookin.m */, + E817C5158801A50C62075BCDB67C7071 /* Image+Lookin.h */, + 97EFFE2479D724D2D21DC6D71D9380DE /* Image+Lookin.m */, + 55DCC1828515EB271D17EE801C6ADB75 /* LKS_AttrGroupsMaker.h */, + 9E27852353DF8343675DE5B16E87CD7B /* LKS_AttrGroupsMaker.m */, + 6D2A58A3F59B220AEFF680CFDB7B9FE8 /* LKS_AttrModificationPatchHandler.h */, + 9EC2CE7230178B73AB10D425029B9E7F /* LKS_AttrModificationPatchHandler.m */, + 1A0055A793E4CA7BC665FB8D71AB9FA0 /* LKS_ConnectionManager.h */, + 14ADFCF379EBFC22FDF2F560A71B401F /* LKS_ConnectionManager.m */, + E3B6051B5DBEC45E815939A97BF7BBFC /* LKS_CustomAttrGroupsMaker.h */, + EBC38AEFD95B5A6302BE5AA3405EC1FE /* LKS_CustomAttrGroupsMaker.m */, + 907D64C007B298D9AB042498DDF5F69D /* LKS_CustomAttrModificationHandler.h */, + 4A9FE906403E0EF37A9C433441856AE0 /* LKS_CustomAttrModificationHandler.m */, + 253F01264DD6A7D63DB8CC1D7D744996 /* LKS_CustomAttrSetterManager.h */, + C1FBC9F985B42A93BD8503A205B91979 /* LKS_CustomAttrSetterManager.m */, + BA95282A74089DF677AECC11548EC92D /* LKS_CustomDisplayItemsMaker.h */, + 26A29B86831E8809CE008EFE8008936E /* LKS_CustomDisplayItemsMaker.m */, + 8BD1BBA1F9E37385193AE9DD1A88F8EA /* LKS_EventHandlerMaker.h */, + EE3CB5083DC0F2D78BA99F4749F1B97A /* LKS_EventHandlerMaker.m */, + 5356A35BFB138443252CA3588496940B /* LKS_ExportManager.h */, + D37041B11126460A8298FAD460FE0AB7 /* LKS_ExportManager.m */, + 8E4F3A2EE59F965CCB3DFC48563C25E8 /* LKS_GestureTargetActionsSearcher.h */, + 9F3FAAEBE4DDBB114C36737DCBDCFC69 /* LKS_GestureTargetActionsSearcher.m */, + 23EC829A73BE2C983F20E677FDCE58A3 /* LKS_Helper.h */, + 6C34E17880742101DF109A53F45DAE1A /* LKS_Helper.m */, + 52008EBCE708172DDA08785A2F800A52 /* LKS_HierarchyDetailsHandler.h */, + EF74EDBD0485FA771A9AA64578456F20 /* LKS_HierarchyDetailsHandler.m */, + B0C97676D17D86D3A7AEB30E8C2A74CF /* LKS_HierarchyDisplayItemsMaker.h */, + FA170CA19720D074821683D051836EBF /* LKS_HierarchyDisplayItemsMaker.m */, + 4EF0E2F830509F4888F8585751321D7D /* LKS_InbuiltAttrModificationHandler.h */, + D073E6FED4775C3235BF126A12EC69F6 /* LKS_InbuiltAttrModificationHandler.m */, + 27BBE0C549C27AFC3E95E715586E93F6 /* LKS_MultiplatformAdapter.h */, + C3D490AA50814705BBD2B14154A7664B /* LKS_MultiplatformAdapter.m */, + A7EB235E011B9336A9AB300EF32D9714 /* LKS_ObjectRegistry.h */, + 466DAE285C3334F3AE413BE41D981841 /* LKS_ObjectRegistry.m */, + 6F849428C576E3A9468531842BDFB6AD /* LKS_RequestHandler.h */, + 9B038BFC1B095F940837959590DA664A /* LKS_RequestHandler.m */, + C315D01368F7DE8AEF8F434127941764 /* LKS_TraceManager.h */, + C45AD5914D7F2D615D3F9C00772CD6DD /* LKS_TraceManager.m */, + 3B4139AF3CC702B273D55B84E85D3950 /* LKSConfigManager.h */, + 1181A58E703113D29E11E933C4405B3D /* LKSConfigManager.m */, + CE5098EE32D614C707923B531CDDE7D7 /* Lookin_PTChannel.h */, + 4BBB67CB5AF9CFAB277F233EE23E2A9B /* Lookin_PTChannel.m */, + 54257FD1D30854784D73CB9C2606B617 /* Lookin_PTPrivate.h */, + E0BA4270627AD3D7F7A5BAAAD7FE8936 /* Lookin_PTProtocol.h */, + C7CC056AFEDD46E13A5C7EAD5B08267C /* Lookin_PTProtocol.m */, + C3FA388D423F78D0AE1E89CDFB8EE15D /* Lookin_PTUSBHub.h */, + 83AD565A60EEE17150633A9FC960E5B9 /* Lookin_PTUSBHub.m */, + 0B734EC845D5153E6BC7492F474CFDBB /* LookinAppInfo.h */, + 1E710F4FB16EBBAC69C02C56E882DD89 /* LookinAppInfo.m */, + 9593BD74900E6D843CFE9DC5976A8CA8 /* LookinAttribute.h */, + 6EB5EF60FB5747DD4C005BBA2CEC46A5 /* LookinAttribute.m */, + 39F5FF5E3E9A0A55CAB1DC5D3F46714C /* LookinAttributeModification.h */, + CD7B3E4A2E5BE7D5793929F0E0BF3FAF /* LookinAttributeModification.m */, + 3AF7EEC072D42B930C8EFE40C2BBBE44 /* LookinAttributesGroup.h */, + 3E4FCD9CEBFE2AEFFBBDCA5661E5113C /* LookinAttributesGroup.m */, + D744D9289D5F0C6D119E52560AA434E9 /* LookinAttributesSection.h */, + B9E4E4DB23E3D62978DB3C96EBC232E3 /* LookinAttributesSection.m */, + C1EDAC4AA18A387C4C2CF424D649014C /* LookinAttrIdentifiers.h */, + 29FD2B9A63329EFCBCA88572F71055A7 /* LookinAttrIdentifiers.m */, + E8743680BDAB8E9BF9BBF3C0E2E48C05 /* LookinAttrType.h */, + 655E010C4B8E2AC28F2C6694262257E0 /* LookinAutoLayoutConstraint.h */, + F9E35DF4DD96537E475BF87667EEE6D1 /* LookinAutoLayoutConstraint.m */, + B3FFF32CB0A8261DA8DD1B50BC6DCE9F /* LookinCodingValueType.h */, + 85F4651A60673FCA78C760D531C07AA2 /* LookinConnectionAttachment.h */, + 0ED90D2CA6E5F0A64EAE0846FA566178 /* LookinConnectionAttachment.m */, + A3545CC97FFE23A0786FACE7932EE658 /* LookinConnectionResponseAttachment.h */, + DD4ED50F3043D29BF308EA6C5E2D4199 /* LookinConnectionResponseAttachment.m */, + 212D5F3CFC0D02910520EB36BD99D7F6 /* LookinCustomAttrModification.h */, + 1B727AAC500EF9B539E094E9C11C4D7F /* LookinCustomAttrModification.m */, + 426E847E30B13D9F12156B9BDFD81EB4 /* LookinCustomDisplayItemInfo.h */, + 8574AAF25AF7B49D29319C3DCFE58E9C /* LookinCustomDisplayItemInfo.m */, + 419EAE78B6D36DA2749972D0E4AD9694 /* LookinDashboardBlueprint.h */, + EA6014C78AC2633EC05987768E12AB6F /* LookinDashboardBlueprint.m */, + 36F0FA6F6A2819FD3BB42BAF0CC428F9 /* LookinDefines.h */, + 6D10B29F985625FD8F32722DA7AB6548 /* LookinDisplayItem.h */, + C6B72DBBDF9038FC45B98590FFEBA8A8 /* LookinDisplayItem.m */, + 5FC79C5166C2D3221576CB972A1AAA6E /* LookinDisplayItemDetail.h */, + 2B52EF67A97FD22FB044A97343A9B21A /* LookinDisplayItemDetail.m */, + 4336B050F67799536B9CCB71760576DE /* LookinEventHandler.h */, + 440E94B9AD51FDF38170F43B90585F96 /* LookinEventHandler.m */, + F695175209CD6A64659C43174FE4E09D /* LookinHierarchyFile.h */, + 7E59076D2765A007CBC9044D38AFBB2E /* LookinHierarchyFile.m */, + C078EA0AA4B6D603C76542BE652008BF /* LookinHierarchyInfo.h */, + 505B6D482600E8CF81BAB5C58BF74C3A /* LookinHierarchyInfo.m */, + 82E3C2374A5253FD68FB4462AC196C71 /* LookinIvarTrace.h */, + DAAFD65A8B40888BCD17923AC9C82911 /* LookinIvarTrace.m */, + 3DAE2D8D9C2E257F951F15C3DA77323B /* LookinObject.h */, + 3E3B71AEC196329C31EDD4D4AB34276A /* LookinObject.m */, + 2EA6FE188B790C5187D388E7DBF4903B /* LookinServer.h */, + 82B1F166DB7BFB53CC0B0815CCEDEFCB /* LookinServerDefines.h */, + 418208706EF0ED4137ADA295565205D7 /* LookinStaticAsyncUpdateTask.h */, + 9E30C942904CE23D0B0F44D4333934C5 /* LookinStaticAsyncUpdateTask.m */, + 8F77B39DFBF53F077329B8D1EA698FA6 /* LookinTuple.h */, + C32357BEDFDCCC4A7A7CFA2B54A15C60 /* LookinTuple.m */, + 2891F6EE4D0052CFD31079E28FEF51E8 /* LookinWeakContainer.h */, + 1CE057CCEA5D2012438C45F87BB9D356 /* LookinWeakContainer.m */, + 45E56602E74E7A005B70C02489452CA0 /* NSArray+Lookin.h */, + 162D928CE2A089AEA1EF3CC1D765F0A6 /* NSArray+Lookin.m */, + 9970CF11ACB6664D0F8F7D8740612EB5 /* NSObject+Lookin.h */, + ECA0DA9391C203431B6208348838B1C9 /* NSObject+Lookin.m */, + 9F8D59DCF5E42ADBC5FEE5FD7A017666 /* NSObject+LookinServer.h */, + C09E0CE1DFC8AA872B05145C3E28A091 /* NSObject+LookinServer.m */, + 28A4713E0867604971607974AF9B43EE /* NSSet+Lookin.h */, + 9BBC4CE0E6DF98929EACF05DD146C876 /* NSSet+Lookin.m */, + 45B1EBF9F1D58CCA30CB4004C23CAB1B /* NSString+Lookin.h */, + 2414A027047ABE3A2476AA9C35FE8895 /* NSString+Lookin.m */, + 3F24D2100AD72D115D29B29BEFA1D3EB /* Peertalk.h */, + 9BE83F56CECDA4D6CD10D59AAE56456F /* UIBlurEffect+LookinServer.h */, + 0F2CD5591B9920DFEE95E0D02CD7172B /* UIBlurEffect+LookinServer.m */, + EF918B26E800EA757410C452292BB16E /* UIColor+LookinServer.h */, + 4B8775C78A1A931C6C991432AD53A379 /* UIColor+LookinServer.m */, + F3A9D834D1A902531DB9016EC9D1C032 /* UIImage+LookinServer.h */, + 8C36862986DFC4F0116A02192F11CBD6 /* UIImage+LookinServer.m */, + DF190E43FFDCD29D99703A05F818C76C /* UIImageView+LookinServer.h */, + 1BA9AAA7CE7F25495C1E05CC418178B7 /* UIImageView+LookinServer.m */, + 1D81C868C1831665C180086D5F3CDCF6 /* UILabel+LookinServer.h */, + A87DF1862223389B1D01641A7A9EA306 /* UILabel+LookinServer.m */, + A9F6D2EF67498000316B8E225344818D /* UITableView+LookinServer.h */, + D2EEF77D3BCC85A25B03E04A84BF16D7 /* UITableView+LookinServer.m */, + F35BA59352BD66E5A38B65AB458C6CB8 /* UITextField+LookinServer.h */, + 38BC517337ABB5BD491E24FFD29499B6 /* UITextField+LookinServer.m */, + CB6A7B26A3B46094E17080056518298B /* UITextView+LookinServer.h */, + 88B0AB2FFDDF0BA8CF4ABB961544D39B /* UITextView+LookinServer.m */, + 850B2C6C14EBC6E789298096BEF91F35 /* UIView+LookinServer.h */, + C8955B6E5F0B69616ECE5ED535BA9EC2 /* UIView+LookinServer.m */, + F7009EC2BB4D53FDC6C9901C3FFF1BC6 /* UIViewController+LookinServer.h */, + 7D9CFD7E8C81DF76A90E065320570722 /* UIViewController+LookinServer.m */, + C43C43AE90DC8E686CCA6240A7D78B35 /* UIVisualEffectView+LookinServer.h */, + ECDB44059BA1D5E4892EF1C33F0559D1 /* UIVisualEffectView+LookinServer.m */, ); name = Core; sourceTree = ""; }; - 278BA3F4B18D03DAFFA7B31C7D8082C1 /* NSURLSession */ = { + 2136BC57CF51B935E0762D56826646CA /* Pods */ = { isa = PBXGroup; children = ( - E5F4E4918198D7216ABDC0BE4C9BFCE9 /* AFCompatibilityMacros.h */, - 8A3DF7C8B0CA95D284475EF487EC6944 /* AFHTTPSessionManager.h */, - 8CABC6887E9E2AF4A62642A0C780B4B3 /* AFHTTPSessionManager.m */, - 35618C07738616EC64E35AB9084E01C6 /* AFURLSessionManager.h */, - A6A924083322C61BD2DC82A438F46687 /* AFURLSessionManager.m */, - ); - name = NSURLSession; - sourceTree = ""; - }; - 3A0A951B4CD76B39B843EF2102500514 /* AFNetworking */ = { - isa = PBXGroup; - children = ( - 743C4A42055B7373FB20F646193D0919 /* AFNetworking.h */, - 278BA3F4B18D03DAFFA7B31C7D8082C1 /* NSURLSession */, - F8863687E232B36E6A3336B80CEF9AEF /* Reachability */, - 42D550893AB4C7DEACCB0BA2BD275931 /* Security */, - A5DEA61008E4B3C548059441B307E57A /* Serialization */, - EAF375AA4ECFCEFB8A42837BED2CA767 /* Support Files */, - 4DFD5EFE1D39A89202C706E005AEAC6C /* UIKit */, - ); - name = AFNetworking; - path = AFNetworking; - sourceTree = ""; - }; - 3C8938BD791B748D62E0594E21A8F606 /* Pods */ = { - isa = PBXGroup; - children = ( - 3A0A951B4CD76B39B843EF2102500514 /* AFNetworking */, - 632F5BB47DEA8EC3D22F645F32B611D0 /* Bugly */, - 055E201C6FE65C14750CE007D95094C3 /* DZNEmptyDataSet */, - 482C57567033D15CB5B58A3A51D16047 /* LookinServer */, - 49A74F626BD81F04B89DC8F68C0C8423 /* Masonry */, - EE64A145CDD38964AF4945D376B599A2 /* MBProgressHUD */, - E11E673B56635EAB5EC9773B8D724830 /* MJExtension */, - A369C1279A7423AC4561A1711312F059 /* MJRefresh */, - C5610FA28BEC5D4814F24C959B9C82BB /* SDWebImage */, + 4362014CEBC66C033529F15C69B0873D /* AFNetworking */, + 9C71B1CF02B9E4141912D9EA756FBF5A /* Bugly */, + A048CA0DA9A51E0CAABB17BBEA72B406 /* DZNEmptyDataSet */, + 04C25B5B06F8693D55AF59061EAFC65F /* LookinServer */, + E825B02CF6761B39104E0AB7BD283E52 /* lottie-ios */, + 8D6721615121C9F3AAF996BF38AE7C70 /* Masonry */, + 1A6DCADEA52AA2C98AC632764268D587 /* MBProgressHUD */, + 86D7B49212C10ECAAE5B8F6BEC47FC57 /* MJExtension */, + 7C2B2CCCC467F4209FB0DEC9EB9C7D38 /* MJRefresh */, + 77DE4DB7CB53C0563513A7FFD22A915E /* SDWebImage */, ); name = Pods; sourceTree = ""; }; + 31D49508B6C2A2740FFEAA0E011538DB /* Support Files */ = { + isa = PBXGroup; + children = ( + 2DD515F7A425516B00425763414DBDE3 /* MJExtension.modulemap */, + FDF986FBD2BE8E5315ABD8F7AC77CCAA /* MJExtension-dummy.m */, + DE034B8AB59F63BF6F4291EE846A8A98 /* MJExtension-Info.plist */, + E9D1CB4B3ECFB71822CB630EDCE39AC7 /* MJExtension-prefix.pch */, + 2C7548F2A8537D1A085C05114169403B /* MJExtension-umbrella.h */, + 60473D1A1552535AACA2C9886A6471BA /* MJExtension.debug.xcconfig */, + C4BB3D2F4DC3D69137636E57BEF94DBE /* MJExtension.release.xcconfig */, + 2B8E68203A99208382E91AF416646F49 /* ResourceBundle-MJExtension-MJExtension-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/MJExtension"; + sourceTree = ""; + }; + 3539F46A28EC2951D38D46592ADB44C7 /* Support Files */ = { + isa = PBXGroup; + children = ( + 6E13EE9A7A2D65532A0FFAB73F160C74 /* lottie-ios.modulemap */, + 6A35608B3374972E80E83CD67BB160D9 /* lottie-ios-dummy.m */, + FAA5F1011F517A2F6BA370BA136DDAD1 /* lottie-ios-Info.plist */, + 5C1E102E1297465412CE41FBF6C9375F /* lottie-ios-prefix.pch */, + FF9559E18864B7A1C6A0D330DBE11FF9 /* lottie-ios-umbrella.h */, + ACEF80D231F2CFD0C04D85BF44B25260 /* lottie-ios.debug.xcconfig */, + 46586766A6BF3CF60E90BEA5447A15C1 /* lottie-ios.release.xcconfig */, + A5CCE872F1B768D7D186A9FA81B107A5 /* ResourceBundle-Lottie-lottie-ios-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/lottie-ios"; + sourceTree = ""; + }; 4098ED899C8DF8E013F9F260ECFAA236 /* Pods-keyBoard */ = { isa = PBXGroup; children = ( @@ -1510,13 +1804,34 @@ path = "Target Support Files/Pods-keyBoard"; sourceTree = ""; }; - 42D550893AB4C7DEACCB0BA2BD275931 /* Security */ = { + 4301E5C3334864D6B292DA68937D79E2 /* Support Files */ = { isa = PBXGroup; children = ( - 3F61B84FD6B8249C85FCBF56257E34C6 /* AFSecurityPolicy.h */, - 34294BB6B51E74AFE5298D85D957E2F6 /* AFSecurityPolicy.m */, + 8085B19AE051A73AA1175B6A8CA9EDD3 /* MBProgressHUD.modulemap */, + 712B592666A1E34B994121F8C4054715 /* MBProgressHUD-dummy.m */, + 5B3F44B607D1D315468817C470DBF7B3 /* MBProgressHUD-Info.plist */, + 01763FC6BEDCD3252C0791FA37D9B29B /* MBProgressHUD-prefix.pch */, + F44212B79C8F78B7273626290DCFE4CF /* MBProgressHUD-umbrella.h */, + 5AF7FC3B980CED875CC7772265BF1250 /* MBProgressHUD.debug.xcconfig */, + 5B950349F3C1E7FD511BC7E648DEFA23 /* MBProgressHUD.release.xcconfig */, ); - name = Security; + name = "Support Files"; + path = "../Target Support Files/MBProgressHUD"; + sourceTree = ""; + }; + 4362014CEBC66C033529F15C69B0873D /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 7244AF642E95CDEB080A67821F491AB7 /* AFNetworking.h */, + 073A3A8850E4AF78DA9992B552621F06 /* NSURLSession */, + A54B865981205AABD8D61F095465DF9A /* Reachability */, + 600455B3D7C01E3732A7B2E4DEA836F3 /* Security */, + 114F055FC48526BE107F3570A713DBBC /* Serialization */, + FFF8EE8CEC31528AFE85F8D6CE206147 /* Support Files */, + AD4DB4D996C39BB57EFA705BB2318656 /* UIKit */, + ); + name = AFNetworking; + path = AFNetworking; sourceTree = ""; }; 47B776543D6613BCB6FB72308F863018 /* Pods-CustomKeyboard */ = { @@ -1535,96 +1850,33 @@ path = "Target Support Files/Pods-CustomKeyboard"; sourceTree = ""; }; - 482C57567033D15CB5B58A3A51D16047 /* LookinServer */ = { + 4FD170A3C295AF226F3250B01D6F56E0 /* Resources */ = { isa = PBXGroup; children = ( - FB435B3C1ABA904B9D4AEBB59855C935 /* Core */, - 73B1383B55A4637636F1D1641B1B4B2C /* Support Files */, + 0DA04830283FDE4CF460F848A504417A /* PrivacyInfo.xcprivacy */, ); - name = LookinServer; - path = LookinServer; + name = Resources; sourceTree = ""; }; - 49A74F626BD81F04B89DC8F68C0C8423 /* Masonry */ = { + 600455B3D7C01E3732A7B2E4DEA836F3 /* Security */ = { isa = PBXGroup; children = ( - F68B2B4FABAF7DB3BFD45E81B3302EEE /* MASCompositeConstraint.h */, - ABFE70D35403EBB3D3B8E84170698E30 /* MASCompositeConstraint.m */, - B36A499BB6A9A389E077337779129B95 /* MASConstraint.h */, - F57A932DBB8EE96EEDB42899B11A3E40 /* MASConstraint.m */, - 7BA0DD426F8305DA317D708459ABA12F /* MASConstraint+Private.h */, - 63B2D397715E1B3990E46DFCAE0A73D5 /* MASConstraintMaker.h */, - 3D891833337A0E2AFA0DBB31899C747F /* MASConstraintMaker.m */, - 82B53F06F74B4F928AF69994EDA63D71 /* MASLayoutConstraint.h */, - 5AE5F5B6D6DAD0B45FC2D30EE6FBEE81 /* MASLayoutConstraint.m */, - B069597AD0812CBF01ACDD3CE4B6F843 /* Masonry.h */, - 21628153BCD0325102EB502FB5AEDF0F /* MASUtilities.h */, - EA5E2A6BFD8D228A6FF7C7C749D642DB /* MASViewAttribute.h */, - 07F0D69559BBD9895C4D0BD66F33AC55 /* MASViewAttribute.m */, - 2FD6A0DEDE4E0A17B8A614C8D15158DD /* MASViewConstraint.h */, - BBC10C6127599FC7CD74CA6E613C44DB /* MASViewConstraint.m */, - 7D45408149C7FF7C3CD91B6DDBFB7448 /* NSArray+MASAdditions.h */, - A054792401E8F9F7BEA8441F9C1DA7C7 /* NSArray+MASAdditions.m */, - E1C46B6B074DF2D170E6F2ACB5E8C8BA /* NSArray+MASShorthandAdditions.h */, - 1A62C9B59CFA9D74EE95F526BE485EC8 /* NSLayoutConstraint+MASDebugAdditions.h */, - 96E64D1052C3FD60EB6BBB8A95EE1349 /* NSLayoutConstraint+MASDebugAdditions.m */, - 6289794567935CA3DC8B5C49AEA74043 /* View+MASAdditions.h */, - 59AE847A100A8834951E42690C982455 /* View+MASAdditions.m */, - 31E7ED25B098BFBF30E180BFC0E2174B /* View+MASShorthandAdditions.h */, - B4D76F7EB1CE870804724BC071C5ACB3 /* ViewController+MASAdditions.h */, - 904AEE3BB6B326E7E1CFD8B0A34306AB /* ViewController+MASAdditions.m */, - 004BCCE6E90EA8F999F5DD21EFC4736A /* Support Files */, + A04258711352429161416B5AB0683EFF /* AFSecurityPolicy.h */, + 6664F841DDF71FD7E0381AFD23B988B4 /* AFSecurityPolicy.m */, ); - name = Masonry; - path = Masonry; + name = Security; sourceTree = ""; }; - 4DFD5EFE1D39A89202C706E005AEAC6C /* UIKit */ = { + 6EA2AE9A53C415F257E3CA650835882F /* Support Files */ = { isa = PBXGroup; children = ( - A565D25677F6FEEAD298666682CDA4B2 /* AFAutoPurgingImageCache.h */, - 3C0293D25B82D4CCF17D52B025BDDA03 /* AFAutoPurgingImageCache.m */, - D3C9902E0E2D0A78C2A349E20322FC80 /* AFImageDownloader.h */, - A67D546CB537E231FE83AA071A555BB7 /* AFImageDownloader.m */, - 245FCAB926AF197B8F4E931DD8477D4A /* AFNetworkActivityIndicatorManager.h */, - 3DD65B80E7AA07416BB8F502F3C3A438 /* AFNetworkActivityIndicatorManager.m */, - F53768EF8D38709F253FC1C181B05162 /* UIActivityIndicatorView+AFNetworking.h */, - 15E423D2DE3EB3895273EDB5BC21FDE9 /* UIActivityIndicatorView+AFNetworking.m */, - 35182E600B80DDDFBA4A4B90FAA71EFD /* UIButton+AFNetworking.h */, - 2D93B5DFF8656FC20174F5CDCB325540 /* UIButton+AFNetworking.m */, - 319E8C485C3E5DB2BFBF15AA61E5ABA9 /* UIImageView+AFNetworking.h */, - 4D125D803F381B689272DFC8613DDA9A /* UIImageView+AFNetworking.m */, - E727648E6DB0C84B6B5C85D16CF9D6AC /* UIKit+AFNetworking.h */, - 219886C4AF0E20C3CD4D4061CAAE8767 /* UIProgressView+AFNetworking.h */, - 2D3B8DD288273B0C3AFDD2F366BB894B /* UIProgressView+AFNetworking.m */, - 32556CF656ADFF88DE99F135C7BE2EB7 /* UIRefreshControl+AFNetworking.h */, - 9228BFB339DE3C8FD5163C974AB7DE89 /* UIRefreshControl+AFNetworking.m */, - 8E466B1532DEF5F8A8FE002C3882E69E /* WKWebView+AFNetworking.h */, - 0426BF3118E242E4EA8BB1145A2A6F60 /* WKWebView+AFNetworking.m */, - ); - name = UIKit; - sourceTree = ""; - }; - 632F5BB47DEA8EC3D22F645F32B611D0 /* Bugly */ = { - isa = PBXGroup; - children = ( - DB6A5FFB077AA72411EB46B8A77A31B0 /* Frameworks */, - A6678288D73D0E7B53AB75DF84AA65D4 /* Support Files */, - ); - name = Bugly; - path = Bugly; - sourceTree = ""; - }; - 6CE3F18721CC834AA1D80F2A9F218CA5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 2625A6F485FAAFFDD766C135FDF8F796 /* DZNEmptyDataSet.modulemap */, - 52CE89D1B7CAF7D6D1E509FE1267800A /* DZNEmptyDataSet-dummy.m */, - 20C240076DD8D1DC14E751DAFAE98662 /* DZNEmptyDataSet-Info.plist */, - 26E9B5584E3E3AA9E7AF8978192DF06B /* DZNEmptyDataSet-prefix.pch */, - FBE4C2596FA0518DD6CED29332B75B5B /* DZNEmptyDataSet-umbrella.h */, - 61A50E7751555885AEB4247687F5DF05 /* DZNEmptyDataSet.debug.xcconfig */, - 52832E51BDED300B58102A301664AD5A /* DZNEmptyDataSet.release.xcconfig */, + 63481D0509749529851E6EBAD855393E /* DZNEmptyDataSet.modulemap */, + 5BBC8EA91BBF38DF80D0B2DD96E175D5 /* DZNEmptyDataSet-dummy.m */, + 63BF82B0A7DCDD126832EFB503D7AE98 /* DZNEmptyDataSet-Info.plist */, + 2D0B2972DB20A835206E3CD09AD37834 /* DZNEmptyDataSet-prefix.pch */, + 0582AF8DFF5BDE75404B2D4484C8DBA8 /* DZNEmptyDataSet-umbrella.h */, + 536C6C1311D021BE4B3D2FFC4FCAAB4D /* DZNEmptyDataSet.debug.xcconfig */, + 5B6EA05154753DC4D375BA1713B9003A /* DZNEmptyDataSet.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/DZNEmptyDataSet"; @@ -1642,146 +1894,224 @@ name = iOS; sourceTree = ""; }; - 73B1383B55A4637636F1D1641B1B4B2C /* Support Files */ = { + 77DE4DB7CB53C0563513A7FFD22A915E /* SDWebImage */ = { isa = PBXGroup; children = ( - 3CF065C3DEDD146A59230103D73E1A55 /* LookinServer.modulemap */, - C4BB81E05861A9C00B09F3A39D27B164 /* LookinServer-dummy.m */, - 2CFE5CE900A783BD5709EEF033BA8475 /* LookinServer-Info.plist */, - 400DE9B9180EAE02FE3ADA6DB9EFD64F /* LookinServer-prefix.pch */, - B1A8FD671105727BDE389DF6E59E7187 /* LookinServer-umbrella.h */, - 9641B4F4D8DDE2072CB32BF4C9C2882A /* LookinServer.debug.xcconfig */, - 2DAD93B79D27664FE05E862A2C992A45 /* LookinServer.release.xcconfig */, + BC97826B3B8B61CAC19E505BBC33BBB8 /* Core */, + F212691013EFD7572885EA363E01FFF6 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/LookinServer"; + name = SDWebImage; + path = SDWebImage; sourceTree = ""; }; - 85416DF4AE2111F696182FA844F2611A /* Support Files */ = { + 7C2B2CCCC467F4209FB0DEC9EB9C7D38 /* MJRefresh */ = { isa = PBXGroup; children = ( - 61E1874601B077A6F69725D9EF8827B1 /* MBProgressHUD.modulemap */, - 16C85770D72E9770C476992A31B3655F /* MBProgressHUD-dummy.m */, - D3412473E790C600A01CFF5127EA049C /* MBProgressHUD-Info.plist */, - 6A6FA79B39689AE1D69FBABCD4BB8F7B /* MBProgressHUD-prefix.pch */, - D219431FF998A6D0FA270965A4CDE56D /* MBProgressHUD-umbrella.h */, - 2940A878AE956B2190BA5A68D63DC5AD /* MBProgressHUD.debug.xcconfig */, - 71C7BAB63ED44B881A65C001AA682ADB /* MBProgressHUD.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/MBProgressHUD"; - sourceTree = ""; - }; - 8AB9F15B6060B4A24C4EA01AC9540849 /* Support Files */ = { - isa = PBXGroup; - children = ( - 0AC3ECEAAABFC0FEDCE3E1B814F1A7E5 /* MJRefresh.modulemap */, - 4D47A5312A106ED050240FD5A4E84CE4 /* MJRefresh-dummy.m */, - D226F4D7ADA4D7570E831057BF0F25E7 /* MJRefresh-Info.plist */, - 650740D8E20A30E70F588321BC583BBC /* MJRefresh-prefix.pch */, - 2065E7BBA3909607E34531E7D59623FF /* MJRefresh-umbrella.h */, - D2BBA8DCCC9E2658211368C22BE1B033 /* MJRefresh.debug.xcconfig */, - 45EDC4788D38048F75B7F3CD0BEF1783 /* MJRefresh.release.xcconfig */, - 51D6AF1225DCDC66E13DAA2BCB6B1DCF /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/MJRefresh"; - sourceTree = ""; - }; - 9F62E2D2D42206A4CD335DDB26C286FF /* Support Files */ = { - isa = PBXGroup; - children = ( - DE365B0506D97BB22271ACD3BE9D48CC /* MJExtension.modulemap */, - 2A7BA44CD5FDF42B32263B5F4259A024 /* MJExtension-dummy.m */, - 5CAEE17C08505E0DF4A1EF22D4CAD064 /* MJExtension-Info.plist */, - 964A9667953DC95C883D7E82FD74B649 /* MJExtension-prefix.pch */, - 808621872AB88E6448666731EB043018 /* MJExtension-umbrella.h */, - 57BCCC946B3042A20D0C8F15D69FF943 /* MJExtension.debug.xcconfig */, - 3E2A55F2F78E11DEDCF2FA119B3E1912 /* MJExtension.release.xcconfig */, - 0BDAABEB54032920AAEBA43908724F60 /* ResourceBundle-MJExtension-MJExtension-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/MJExtension"; - sourceTree = ""; - }; - A369C1279A7423AC4561A1711312F059 /* MJRefresh */ = { - isa = PBXGroup; - children = ( - A53791C99F3E8789C928D8471E4310AC /* MJRefresh.h */, - A417B5FC83ECB57A121FCD14A6DD23D3 /* MJRefreshAutoFooter.h */, - D404BDF65C17843DC41C1611EAAA22EB /* MJRefreshAutoFooter.m */, - C79FFC2722DEE9A1F54D8DBDD3CB2A2C /* MJRefreshAutoGifFooter.h */, - 6E49D88BA109001AA94CB4B1CBCC6353 /* MJRefreshAutoGifFooter.m */, - FAF1C0B2DCF27A6785AA511B6C9290B9 /* MJRefreshAutoNormalFooter.h */, - 79E1EEF42DE5E1954630A63B8A5E02B6 /* MJRefreshAutoNormalFooter.m */, - 80F9F8B5249F11798A805DF46C09F2CA /* MJRefreshAutoStateFooter.h */, - 9450EAE5D947C741A2403ADD203E1875 /* MJRefreshAutoStateFooter.m */, - FDD0D2A5CBDCDA5BDF9600C731F95B24 /* MJRefreshBackFooter.h */, - AB22EEA7E251269666B0DD8D3FCD0892 /* MJRefreshBackFooter.m */, - 2CC603030F93055E51FF99944B356CB6 /* MJRefreshBackGifFooter.h */, - 948E1E3EDCE53B021791B9169CCC28BD /* MJRefreshBackGifFooter.m */, - B70FF2E3C927A22C388C16FE8C3F56DB /* MJRefreshBackNormalFooter.h */, - 426AEC2F7F358DEDB66C3F2D15F925A4 /* MJRefreshBackNormalFooter.m */, - 58AA57BAA26D8C03E401EEFD3C78271F /* MJRefreshBackStateFooter.h */, - 0E24EFDE111F674B782A0DB6E26DA6D2 /* MJRefreshBackStateFooter.m */, - 383AEE356898B114D8DD079C51566FF2 /* MJRefreshComponent.h */, - EF2661A0DF69E1828AB8D83F666F4FBC /* MJRefreshComponent.m */, - B985D3DA018E1C8C3AC44ADE702B404B /* MJRefreshConfig.h */, - 4C9BF32317317006604613DB6B7E6531 /* MJRefreshConfig.m */, - B9E85A8129A4E7BFE16B2262D78F1DCC /* MJRefreshConst.h */, - 9324A882B3ED55B3EF9D92D946555583 /* MJRefreshConst.m */, - 120B89B8756AC54266917A34CDCADBB2 /* MJRefreshFooter.h */, - A4E4BD7B01B4DA8E6A41CD86E6AB6B44 /* MJRefreshFooter.m */, - E7FE66EE9C43A4BD03E9F354FADF7098 /* MJRefreshGifHeader.h */, - 0F0234E8EBBDCA694F549267CF8444C2 /* MJRefreshGifHeader.m */, - D5509360DE46CF0B8D64058FE9FD45E8 /* MJRefreshHeader.h */, - 5989AAAB35D0B7EF697456F3897FACEC /* MJRefreshHeader.m */, - 5932D997195DFCB258D366D038A56978 /* MJRefreshNormalHeader.h */, - 854F1B8C164960BB0D2721562BD6E7E5 /* MJRefreshNormalHeader.m */, - A8E1E4CE0CD5AF60097B9523ED2201F8 /* MJRefreshNormalTrailer.h */, - E25013592494E49EB3F378AA4A68FB7A /* MJRefreshNormalTrailer.m */, - E0E79E8251323154CB271295CCD93D0A /* MJRefreshStateHeader.h */, - D3A9927A87E21A8976D18DC44FE50014 /* MJRefreshStateHeader.m */, - 3DDB2F652BC38BC05396DCC9F34040CD /* MJRefreshStateTrailer.h */, - 6A2C339DB0F9EF94544BE6FCDA59F50F /* MJRefreshStateTrailer.m */, - E603FC069FE0FF9249D8A7348F6E7795 /* MJRefreshTrailer.h */, - ABCA85AD5553CAA4C58A12223211E18E /* MJRefreshTrailer.m */, - 1E12075C58652877783AAD26D8A6ED78 /* NSBundle+MJRefresh.h */, - 8E6B85BD26EE974026A447B476B2932B /* NSBundle+MJRefresh.m */, - EE4B0CFE38831013E2F465F169783700 /* UICollectionViewLayout+MJRefresh.h */, - B7D4D5B8A3207BDAE71FAE9F1B443CBF /* UICollectionViewLayout+MJRefresh.m */, - B640B3AD2FE955C7A51E5B1F84A61189 /* UIScrollView+MJExtension.h */, - F61E20013C3B1EBDF05023CF2525C38C /* UIScrollView+MJExtension.m */, - AEB9B57AEEA7BDF0C696120F4B110F33 /* UIScrollView+MJRefresh.h */, - 0236FAD4E41045C8223B36E40BDEDF2C /* UIScrollView+MJRefresh.m */, - 61AA277CF1084D31AAA460D8C1A9BE4E /* UIView+MJExtension.h */, - 45DC3F40C3A1FA5B5920DED3DF89557C /* UIView+MJExtension.m */, - FD75246711B9ACD8C080F9752A75506E /* Resources */, - 8AB9F15B6060B4A24C4EA01AC9540849 /* Support Files */, + 0BF4C6C2E87BA6C07064482E607F1260 /* MJRefresh.h */, + FBFBB6274776EF5C0B86FD389D2A9B4A /* MJRefreshAutoFooter.h */, + 7EA68F387E9D6925383885CD76416F72 /* MJRefreshAutoFooter.m */, + 60F506657CC6F4A87CB4CC4065096FF6 /* MJRefreshAutoGifFooter.h */, + 6F0A1F567AF929A141BB507491CE4DCD /* MJRefreshAutoGifFooter.m */, + 321912138DF88B91861FB8BC409A0A6D /* MJRefreshAutoNormalFooter.h */, + 28B17DCC89FCDA5BCF7A5FC8C5090B1D /* MJRefreshAutoNormalFooter.m */, + 7BD0D47073F630039201E8CED9FA5AF9 /* MJRefreshAutoStateFooter.h */, + C2766BD63788096A153613E7FA57A56E /* MJRefreshAutoStateFooter.m */, + 5B664145800977547E0543C1869DEFCB /* MJRefreshBackFooter.h */, + E8B692DF0DBDC1936CDAE65738E9975D /* MJRefreshBackFooter.m */, + CCFF2E54489411070A1C337E3ADAB5FE /* MJRefreshBackGifFooter.h */, + 391C48C35FC8E4BA5DD8A3B5FEE1EC06 /* MJRefreshBackGifFooter.m */, + 21F65C758C599537C151265FFA275338 /* MJRefreshBackNormalFooter.h */, + 02186FE758CB83D1F7BB1BA950BFBDFC /* MJRefreshBackNormalFooter.m */, + BFFE0983F070225A46ABB71E0933410E /* MJRefreshBackStateFooter.h */, + 4477BB9DDE05D1D2E53E7D7AC8E674E5 /* MJRefreshBackStateFooter.m */, + B198E2A178CD637F898A9FC759F5AF36 /* MJRefreshComponent.h */, + 565EF00A28E7DFCAFB6E2DCC81FBDE7C /* MJRefreshComponent.m */, + 3986483EB018703D62F349C2BA876EEA /* MJRefreshConfig.h */, + 2221DB8D43C762DB571693B35D1BAFD0 /* MJRefreshConfig.m */, + 3530E3233AB5FDDD021147EAB477BC6B /* MJRefreshConst.h */, + C643BD492B4B2B42AEE19A95BBBBABDE /* MJRefreshConst.m */, + B5C7A1209E91236FDFD8AE69DE80B5FD /* MJRefreshFooter.h */, + B0C2EC8BCDBC5B5B3EF574A6F97CB366 /* MJRefreshFooter.m */, + 4A5743BAAC497A4F53A9E84F3A16F11B /* MJRefreshGifHeader.h */, + 115C3E9007751CB9170B5BD6B88B296C /* MJRefreshGifHeader.m */, + 5DA693F8681513C57B084ED6AFD87D21 /* MJRefreshHeader.h */, + C72375EC7D8FEC4DB92BB3A0C474BCE2 /* MJRefreshHeader.m */, + 2D2C5101C8A6382A6CB5C288F83A8E0A /* MJRefreshNormalHeader.h */, + 53BA5165C83D9DBDC9750CCDD4E14723 /* MJRefreshNormalHeader.m */, + 9EADA717AC87F6036492553C299F466D /* MJRefreshNormalTrailer.h */, + 9EAE4315E539C1E8519CCCC290820AEC /* MJRefreshNormalTrailer.m */, + F119DF30C111115619E86829F8ECE934 /* MJRefreshStateHeader.h */, + 412199FDA4EB083F463E1C33A21C8CC1 /* MJRefreshStateHeader.m */, + D5C249C27473B9D78B0AF5AA0AFA0CEA /* MJRefreshStateTrailer.h */, + D0381D5C27B21FC766E7E90B56D44358 /* MJRefreshStateTrailer.m */, + 99B65B64136C9389CC416F8FDAE36094 /* MJRefreshTrailer.h */, + B84EE19439FF7648170386C4262C0475 /* MJRefreshTrailer.m */, + 14A3CDE16C316BF2E36E352A45B9801E /* NSBundle+MJRefresh.h */, + DE9C3EEAC553F6D9CDB67DE525CB2E8D /* NSBundle+MJRefresh.m */, + FCCE9835E4170A085879F19F6504C6BF /* UICollectionViewLayout+MJRefresh.h */, + B0AB5F1118B885FC260AA61EFF770B2C /* UICollectionViewLayout+MJRefresh.m */, + C9E6B028FFB02F2D9C678B416E0E0D15 /* UIScrollView+MJExtension.h */, + 18AFA5B0B1A9EF84657670C7FAC7A9F2 /* UIScrollView+MJExtension.m */, + F062F7E1CAD4A4E0E2AC47684DBA03D6 /* UIScrollView+MJRefresh.h */, + A72FB198DF157D1DBD45AC2B34B6CC9B /* UIScrollView+MJRefresh.m */, + A7DD3B2EA73461CAB987E5245908721D /* UIView+MJExtension.h */, + 1913D7B9AD326C90DCD4BB68A80B3046 /* UIView+MJExtension.m */, + EC687B1F66B3D393AE3CF105B49C6C34 /* Resources */, + E5ACCB285385454382DAD17C61A95525 /* Support Files */, ); name = MJRefresh; path = MJRefresh; sourceTree = ""; }; - A5DEA61008E4B3C548059441B307E57A /* Serialization */ = { + 86D7B49212C10ECAAE5B8F6BEC47FC57 /* MJExtension */ = { isa = PBXGroup; children = ( - CA67A34B63E36E76FF453D2ABD613A39 /* AFURLRequestSerialization.h */, - 5C457050D64C2C7287BDFC768D33C9AE /* AFURLRequestSerialization.m */, - F3D6C729EB2C2561DF46F90B1EE029B4 /* AFURLResponseSerialization.h */, - 05D83C1EC3DD8D27EE1C07CFDE18D72E /* AFURLResponseSerialization.m */, + 671323D7DE700F2D9BECEEEEFC4A4928 /* MJExtension.h */, + 07D0F6419EF5C5127ACC00EAE195D8A2 /* MJExtensionConst.h */, + 9E874E62C2BEEB18D79F53EB63CB7B65 /* MJExtensionConst.m */, + 1BD06FE5E7BD6C03CE890911563EEF5E /* MJFoundation.h */, + E634E5633F657786B044C2A918E019C9 /* MJFoundation.m */, + 1B7FBC2AB719120F37255CB203D19C30 /* MJProperty.h */, + 1C5877EADFE0A161E5C97583382CB47D /* MJProperty.m */, + 538F6F082D2A21D465D72E3F2C96CB37 /* MJPropertyKey.h */, + 21D0C6357BF8326FF0066E3513EEA5BC /* MJPropertyKey.m */, + 83E24BD1B5A894294D523FC3499D056D /* MJPropertyType.h */, + C8AF30BA5FCAEFB31CFE6C47D25A915A /* MJPropertyType.m */, + 0C3BC3B9889D1DBDA3735ED1B8C20E49 /* NSObject+MJClass.h */, + 42A0EB37C7894465F7B5A5D138B1CF5F /* NSObject+MJClass.m */, + 9C8D1ED13B05CDE529BA80C235F5E47F /* NSObject+MJCoding.h */, + A4CF6D4E28861162065F5E9E77AE1E79 /* NSObject+MJCoding.m */, + D98BB3CC68B7C3491A9F70BC923DB26B /* NSObject+MJKeyValue.h */, + 51206F690E3F9EB32D282C65DD5035A8 /* NSObject+MJKeyValue.m */, + C13062FDE2308A9D2DF13CA742EB2C4E /* NSObject+MJProperty.h */, + A76EB6E6DE10435AD035A888EE1DE9CB /* NSObject+MJProperty.m */, + A7253D6026271401CA5BD4DBA6B8D210 /* NSString+MJExtension.h */, + BD7524C4B5AE206A1B0BA415448A7856 /* NSString+MJExtension.m */, + D20A9C8D253A360DD3704ABE660F789E /* Resources */, + 31D49508B6C2A2740FFEAA0E011538DB /* Support Files */, ); - name = Serialization; + name = MJExtension; + path = MJExtension; sourceTree = ""; }; - A6678288D73D0E7B53AB75DF84AA65D4 /* Support Files */ = { + 8D6721615121C9F3AAF996BF38AE7C70 /* Masonry */ = { isa = PBXGroup; children = ( - 18DB01964CBE026F2E6511875E1A98E2 /* Bugly.debug.xcconfig */, - 8C9727D0D56A9017D437CA50176F0474 /* Bugly.release.xcconfig */, + 423011622DD8F81713938A78B5F61A57 /* MASCompositeConstraint.h */, + 7BDC97000BCCBCD76929EB4158EABBF7 /* MASCompositeConstraint.m */, + 8D6239421DBA2AA663641F9AAB1985B8 /* MASConstraint.h */, + ECEC7FFD61060DE487BE317D1D173EA7 /* MASConstraint.m */, + 802604B240799DBCE659B6A4EF81494F /* MASConstraint+Private.h */, + 2DBED93C98FBCF02E6C348D72AE3467E /* MASConstraintMaker.h */, + 9986D42F8471D0820048BA27C40B1B0E /* MASConstraintMaker.m */, + 5362B5CFE709D323C58661A555EA0FCD /* MASLayoutConstraint.h */, + 09ADD98E6845BBE361C99DDB730B1A04 /* MASLayoutConstraint.m */, + 038BE638009D15FEBC743BF8C2341362 /* Masonry.h */, + B85CA0D358A6C59EF8B18ADABE1C975A /* MASUtilities.h */, + 2E77C169CB17466002DB92D7552A1CE3 /* MASViewAttribute.h */, + 7D2735AE63774D5D2365CAE4C9E270E8 /* MASViewAttribute.m */, + D353E96B6BCDB17BC747EFF7E777C4F0 /* MASViewConstraint.h */, + BAE2E0374B727874C33CF0DE8E025A3E /* MASViewConstraint.m */, + A9FF485166EB3A70D8F8D26A6B653B1A /* NSArray+MASAdditions.h */, + B2A7502555BE164EB76A9C6BC6C20F6D /* NSArray+MASAdditions.m */, + 386F002BCF5A7ED180013733139D51E9 /* NSArray+MASShorthandAdditions.h */, + 60CEAD00694E0294FFC1464C9E470990 /* NSLayoutConstraint+MASDebugAdditions.h */, + 67E45B07A8C73D258BC721F9424D2BEB /* NSLayoutConstraint+MASDebugAdditions.m */, + DB3F1D530B2E6D3D749981612DF4EF0E /* View+MASAdditions.h */, + 7409B8F68BB7F5FE38B11EB1CCB824F7 /* View+MASAdditions.m */, + BEE1C30050F9C1B5AE62C7583A229DFF /* View+MASShorthandAdditions.h */, + B4E0902E263D01CA193C82577929F839 /* ViewController+MASAdditions.h */, + 1955F41E0706379EF05FC01843BA8921 /* ViewController+MASAdditions.m */, + 0848049023E63D9D339EA99F26E8FD7E /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Bugly"; + name = Masonry; + path = Masonry; + sourceTree = ""; + }; + 989A8FF813C2CD7585596F518E6073B5 /* Resources */ = { + isa = PBXGroup; + children = ( + F80F6E8D3E01737C266F7948E2E99D41 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 9C71B1CF02B9E4141912D9EA756FBF5A /* Bugly */ = { + isa = PBXGroup; + children = ( + C95033D1C74FD29ED384ACDE1B5A4C61 /* Frameworks */, + D8B7FEE3DE20CF364CA04FF9CE692AF3 /* Support Files */, + ); + name = Bugly; + path = Bugly; + sourceTree = ""; + }; + A048CA0DA9A51E0CAABB17BBEA72B406 /* DZNEmptyDataSet */ = { + isa = PBXGroup; + children = ( + 009D72B656589FB38748BC4F330C2688 /* UIScrollView+EmptyDataSet.h */, + E8F16C0387436C0A7B5DC291FC5EC84C /* UIScrollView+EmptyDataSet.m */, + 6EA2AE9A53C415F257E3CA650835882F /* Support Files */, + ); + name = DZNEmptyDataSet; + path = DZNEmptyDataSet; + sourceTree = ""; + }; + A54B865981205AABD8D61F095465DF9A /* Reachability */ = { + isa = PBXGroup; + children = ( + 32A9453657A00F96F67E70F7AC7A0F7A /* AFNetworkReachabilityManager.h */, + 1485A77C75A87C3D9C35F8002931EE32 /* AFNetworkReachabilityManager.m */, + ); + name = Reachability; + sourceTree = ""; + }; + ABC988430FD741F4A5BE89BAF5CAF576 /* Products */ = { + isa = PBXGroup; + children = ( + A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */, + 5DA4577FE3BC4A03751108FFED07B385 /* DZNEmptyDataSet */, + 25664483ABF4DC8EC03E7472AA04333B /* LookinServer */, + 51BA97E8B5085EFFB47BC9C0B785CEA7 /* lottie-ios */, + E8F840BD36B903B27E980AFC9F11A82E /* lottie-ios-Lottie */, + 1FFED36A657123030ABB700256D73F15 /* Masonry */, + 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */, + 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */, + 43EAAD2AB7E6B407E80E95F643F93D22 /* MJExtension-MJExtension */, + E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */, + 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */, + 0B4AAC15A428CDC2A62AF9CC27BEA609 /* Pods-CustomKeyboard */, + DCA062FD08AC9694D8D781B3492421C5 /* Pods-keyBoard */, + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */, + CF1281E58AA1045D4B7F33FC56691C42 /* SDWebImage-SDWebImage */, + ); + name = Products; + sourceTree = ""; + }; + AD4DB4D996C39BB57EFA705BB2318656 /* UIKit */ = { + isa = PBXGroup; + children = ( + 863D84A17942D0E17AC5468211A568A1 /* AFAutoPurgingImageCache.h */, + 9394975673021D370D4F707E619AF2BF /* AFAutoPurgingImageCache.m */, + DABD10BFDD200E2871D007BE2C1509CA /* AFImageDownloader.h */, + 28C700888F633E86E1D8FA3945E75225 /* AFImageDownloader.m */, + 7A36446F389ACA7531C9A4868C788181 /* AFNetworkActivityIndicatorManager.h */, + CF117705B5C8622EFAE4FD550C15E7A6 /* AFNetworkActivityIndicatorManager.m */, + 3D48C6742E38C4FE45D03CC723412748 /* UIActivityIndicatorView+AFNetworking.h */, + F8240D78E227CF08269208266B359856 /* UIActivityIndicatorView+AFNetworking.m */, + D7657C6F513810FF5028EF3C8B02968D /* UIButton+AFNetworking.h */, + 08333FE8538C0478DED633658959E47F /* UIButton+AFNetworking.m */, + 838A50D9CDFF91A2855B40D1F8A5BE69 /* UIImageView+AFNetworking.h */, + 233C37AC69FFC5B7F27E6C9BA33D8F2F /* UIImageView+AFNetworking.m */, + 90CFBF9235075408C904B6DABEEA2F13 /* UIKit+AFNetworking.h */, + 23E1A13685067AF13A97BF22C69FA0CC /* UIProgressView+AFNetworking.h */, + 97CFADF49D680679D6078BFE8FB65081 /* UIProgressView+AFNetworking.m */, + 81274F7057ADBF76FED3362415EC55DC /* UIRefreshControl+AFNetworking.h */, + 1FD8AED60E26E34AE37988903944A3AD /* UIRefreshControl+AFNetworking.m */, + 7BEDD7151481C270A240BCBD54C3BD7A /* WKWebView+AFNetworking.h */, + 2243DD00DE471869684FE10CFA3F77E3 /* WKWebView+AFNetworking.m */, + ); + name = UIKit; sourceTree = ""; }; B94D7768568A9992200DB461E8CF687F /* Frameworks */ = { @@ -1792,14 +2122,168 @@ name = Frameworks; sourceTree = ""; }; - C5610FA28BEC5D4814F24C959B9C82BB /* SDWebImage */ = { + BC97826B3B8B61CAC19E505BBC33BBB8 /* Core */ = { isa = PBXGroup; children = ( - 1DF4B2EDEE04858C6D572415F9FFA5F7 /* Core */, - 139D61AB9CCEA3CD3FE43AE8F0DFA14F /* Support Files */, + 76A90BA0FDEB19E5BCD2C7BAA9C0134D /* NSBezierPath+SDRoundedCorners.h */, + 260216431024153F0424A4A48619E4A6 /* NSBezierPath+SDRoundedCorners.m */, + CFD079B1ED36BF1AE2E2AE9A1553FF27 /* NSButton+WebCache.h */, + F29105585CA9EA4044256AB1FD6F1C26 /* NSButton+WebCache.m */, + A395F41796B1CE2361DF4DC1913B4D6A /* NSData+ImageContentType.h */, + A7E87F8A087863F9CC23EE3AD4EE05B5 /* NSData+ImageContentType.m */, + F21872DF2B8F1D5F2A76579D75F10148 /* NSImage+Compatibility.h */, + DC66CE51768587BF0EA80B078A703479 /* NSImage+Compatibility.m */, + 360B11050A020700AC654D7E70206A75 /* SDAnimatedImage.h */, + 334223D1732D9FA282B307802354F822 /* SDAnimatedImage.m */, + 5F2624C92BC8C5275C0312A5F15AB651 /* SDAnimatedImagePlayer.h */, + DD4500370110CE30F38E5EB8141CCF86 /* SDAnimatedImagePlayer.m */, + 985A0647BFFC83000EDF42EB612CDA60 /* SDAnimatedImageRep.h */, + EB94BACABEE654AC5908CF98BA271A4D /* SDAnimatedImageRep.m */, + 42E528E57386958143E76DC7A69BD943 /* SDAnimatedImageView.h */, + B9A8C2D0C0F5CE7BAE1294C2CBCD0398 /* SDAnimatedImageView.m */, + 20E3D5F73805D1354BC5705A581B7310 /* SDAnimatedImageView+WebCache.h */, + 812ED7B28F0E145819B778744305C5E8 /* SDAnimatedImageView+WebCache.m */, + FDD5DBABF9106A06C5D41FA98F76F3B3 /* SDAssociatedObject.h */, + CC07D0B98910CAEB51550360AEBE2927 /* SDAssociatedObject.m */, + 5E3E1CED1AC0225ABBA7CD840120690D /* SDAsyncBlockOperation.h */, + 82C59133DD7F96F32B51DDFF5BD8B012 /* SDAsyncBlockOperation.m */, + B154036337A385D90E39DDEB774F2198 /* SDCallbackQueue.h */, + B79B0CB2219FA6E52F934720669267A1 /* SDCallbackQueue.m */, + A4E961169250B80B0A6D7292D81E1B30 /* SDDeviceHelper.h */, + EF03E12D45E449C98A8C9255C4D5997B /* SDDeviceHelper.m */, + 519155D50D1329095FB54FA510CFD59B /* SDDiskCache.h */, + 22C2CA34C66E1BD2C48A82C7DB56E6D6 /* SDDiskCache.m */, + 72A3538489B763F7B56A501FBD3F6DC3 /* SDDisplayLink.h */, + 7B2D7311C548FE2D75C0EEBC211995A2 /* SDDisplayLink.m */, + 4F40E2A2CFD31DEBCFD012E8AAC7A62E /* SDFileAttributeHelper.h */, + 2C1D86F67FBC7E9087B8D96626CF725E /* SDFileAttributeHelper.m */, + 9259F078559C2E842E3E823D5BBEA152 /* SDGraphicsImageRenderer.h */, + 7860AB8DCEE1B27AFC0F52F691F56817 /* SDGraphicsImageRenderer.m */, + 3E4850AE143E84F838F3B42BB41A596B /* SDImageAPNGCoder.h */, + 0BED92A4C73248A5D1906171ED32A63C /* SDImageAPNGCoder.m */, + 76387329CA57243454030B76DC6A5E11 /* SDImageAssetManager.h */, + A9EB92B2CD0DD2858B79BE7561D485D6 /* SDImageAssetManager.m */, + 675595D151642547CD310FE30A63A699 /* SDImageAWebPCoder.h */, + DA474FD59042ED22158D4CBE9129A6C0 /* SDImageAWebPCoder.m */, + CE264DED17C3E3E1051842B8EE95B875 /* SDImageCache.h */, + DC566A25FB8741D124E279E45C71131A /* SDImageCache.m */, + A9981422F267218B186F96EBE87E78CD /* SDImageCacheConfig.h */, + 593DA693160BD486D8A2B4A95A6508B9 /* SDImageCacheConfig.m */, + BCEE9F77D163ECC2896D0BA650B77D3A /* SDImageCacheDefine.h */, + B7FCB1383A96738408BB53DBC0FAC4EE /* SDImageCacheDefine.m */, + F700FF1F501E4E31BEDFD51001DC1382 /* SDImageCachesManager.h */, + 94E1602E3436C82C60DD50E3CA701878 /* SDImageCachesManager.m */, + A4FFCC7F623FB678107B32EE45246B32 /* SDImageCachesManagerOperation.h */, + 91D7986EDBB5C05885421710B2929271 /* SDImageCachesManagerOperation.m */, + D282562970AE2A018E00D59FFC473E67 /* SDImageCoder.h */, + AE794049E484CC97781712EC9E88926F /* SDImageCoder.m */, + 893CA99CE68216B41DFA983109088F17 /* SDImageCoderHelper.h */, + F8D452C354CC07110B793509CDC4B8B0 /* SDImageCoderHelper.m */, + B385616E29C56F1065D513D688A6A283 /* SDImageCodersManager.h */, + 370FAC9D62B95469A30702A3BD34569B /* SDImageCodersManager.m */, + 6759DC459162569720553EB7EB03D4DA /* SDImageFrame.h */, + 608DA2806FEE128BDDA39D7217DAAB7E /* SDImageFrame.m */, + 6E4E913EE1CEBB738C3DC03360C898B5 /* SDImageFramePool.h */, + 76B30379A5FC60D096DE28AF1F7FE80F /* SDImageFramePool.m */, + 454AE8290CADCF24FC0C50B45EA09057 /* SDImageGIFCoder.h */, + 108CAD04AE05DC568C1E9E7A16D52875 /* SDImageGIFCoder.m */, + C4B89F80EAD4C23CB8FCA2C0DE2DCBE2 /* SDImageGraphics.h */, + 237831FD808D45AA5DB8412C1BA57713 /* SDImageGraphics.m */, + 94C47D37BDA5FFB3958DA8A59A74D82A /* SDImageHEICCoder.h */, + D9FA99E5DFFE40D7DF6135228A675AF6 /* SDImageHEICCoder.m */, + 8FF1F22BD601A5F02CD4048EFF2FD327 /* SDImageIOAnimatedCoder.h */, + 6965B9073E9D634DD8C40E407013F155 /* SDImageIOAnimatedCoder.m */, + AE72483304FE178039C2CFD962CFE335 /* SDImageIOAnimatedCoderInternal.h */, + B1F343292441688F2BC2B256FC2201BC /* SDImageIOCoder.h */, + 26EDE554C5CF56F050377BDB96246E48 /* SDImageIOCoder.m */, + D0F813082650C5F50C1BD1187BB78807 /* SDImageLoader.h */, + 28191A1942A1820843B4FC59A92128B6 /* SDImageLoader.m */, + 333B8F2E8C0FCAC3100D466CF1DB108F /* SDImageLoadersManager.h */, + 93193A0E6ED742E3C32B70F716E052AA /* SDImageLoadersManager.m */, + ECD9216B7DC2A2AF3E77EC7E99E8C8A0 /* SDImageTransformer.h */, + 267474AEE2CD1927089157AE230FB8DC /* SDImageTransformer.m */, + D5927150B93BA174C256C7736A8A055A /* SDInternalMacros.h */, + 4ED479666B63A993A473B42BC9964FF5 /* SDInternalMacros.m */, + 143EC1D5A4E77659DF21C85FBEBCF739 /* SDMemoryCache.h */, + 4552D8C330B0C2C1287281C74A75D135 /* SDMemoryCache.m */, + 5176C44179911BE6096B6F78D7B0547C /* SDmetamacros.h */, + AB336082852242AC0523027278573D0D /* SDWeakProxy.h */, + 88797777ADDC62A67F19032A2211713C /* SDWeakProxy.m */, + 0FBB3D95250E585EF0343DF2BC5290AA /* SDWebImage.h */, + 2566991209B800FD7FAF17517B045915 /* SDWebImageCacheKeyFilter.h */, + C480A62A3336487BAE97082368E3258B /* SDWebImageCacheKeyFilter.m */, + B4A6075AFD2A762034894457C45650EC /* SDWebImageCacheSerializer.h */, + 1D7F51642DDCF1DC83B98FDD221BF1B7 /* SDWebImageCacheSerializer.m */, + 754F007B1AD2FA757DC521D446B39178 /* SDWebImageCompat.h */, + 09E5CB8850637C7A241D1FE926F62C79 /* SDWebImageCompat.m */, + 8E5B849C455471BCDB623C61F8C9A5C6 /* SDWebImageDefine.h */, + 0C2E63E5EB9C6856F3C527056CE8AD9F /* SDWebImageDefine.m */, + DCB828210183DADE92F1581FD9DD70FA /* SDWebImageDownloader.h */, + C5EA0EF8AD8CE478D76BBA3591A7CB3A /* SDWebImageDownloader.m */, + 696B681353CC0D5CC37B2FECABDA024D /* SDWebImageDownloaderConfig.h */, + 1B921FF6F8D91DE355289CD299B0C48A /* SDWebImageDownloaderConfig.m */, + 805ECAC86B71F29AEECB62A9EB78501F /* SDWebImageDownloaderDecryptor.h */, + 77B0F8398C723F548412D9D517A0EF96 /* SDWebImageDownloaderDecryptor.m */, + 85A0043427A3E5D610ACCF9BF3E59DC0 /* SDWebImageDownloaderOperation.h */, + 3FFFEB5A4266C57EF054676F61E3ED14 /* SDWebImageDownloaderOperation.m */, + F9529A4CC737A0D21D97F97AF537442A /* SDWebImageDownloaderRequestModifier.h */, + 511B766B94F97409E68BCE900C51FBF0 /* SDWebImageDownloaderRequestModifier.m */, + 1DCDEE016EE11CD11BD0E469EEB8197E /* SDWebImageDownloaderResponseModifier.h */, + A9435816EE997135BCA2DBC2836F4457 /* SDWebImageDownloaderResponseModifier.m */, + BE6317D3454F388D89BF78E6FB60FA53 /* SDWebImageError.h */, + 35A75BA7C6FAC4078A7777D59F6B787E /* SDWebImageError.m */, + 092146456740DF65E5EAA20611C7D901 /* SDWebImageIndicator.h */, + C26AFD39A6FD75465E81A0AE96EC820C /* SDWebImageIndicator.m */, + DC586DD5612C6B4D55021FB5B6650A21 /* SDWebImageManager.h */, + 8D34A5B2E9A897625C6F45474D9F8C1D /* SDWebImageManager.m */, + 35030695B7BEB6D9746F4153406B5234 /* SDWebImageOperation.h */, + E202340452802F3A8D507151653F79B4 /* SDWebImageOperation.m */, + EFD49AE2AA7E5710A393A5684AA18C1E /* SDWebImageOptionsProcessor.h */, + D2EE840457EF72B6636A7558D7CA35A7 /* SDWebImageOptionsProcessor.m */, + 869C7627AB8F6C1A6A1B23147909B2A6 /* SDWebImagePrefetcher.h */, + 04A97854FF137F06C6D264D54227F0DE /* SDWebImagePrefetcher.m */, + F7D2581DA723898A6BA1E2D2DC68A987 /* SDWebImageTransition.h */, + 3E419E7B3068425BA42B12905F41B470 /* SDWebImageTransition.m */, + 2A7DFAA6909322BD702F66A06CDF4D02 /* SDWebImageTransitionInternal.h */, + 89A41D3BC17523C56CFFEC6FCAB76AB6 /* UIButton+WebCache.h */, + 3BFB12A07B7CD710DC791392EF1601B2 /* UIButton+WebCache.m */, + 4C5DC4F3097B42D433DC149C99560B79 /* UIColor+SDHexString.h */, + DA27CEE6903745647DDFE563DA5CFAFD /* UIColor+SDHexString.m */, + 2422FBE983F4A7ED65B9DB61A2C03B6E /* UIImage+ExtendedCacheData.h */, + 2C477F73C90FE2DF3612D030B50B3838 /* UIImage+ExtendedCacheData.m */, + AA99B210CCC1F3D215A774A2CB6F0046 /* UIImage+ForceDecode.h */, + 6F1D519909A661AAAF2CDDF1A05EB499 /* UIImage+ForceDecode.m */, + 37FC258EA782835D2F4B690CE8D18C4E /* UIImage+GIF.h */, + AA8627134477274975DAC7EE73B5A16B /* UIImage+GIF.m */, + 060141C08B0B82907CD5F340847F21AC /* UIImage+MemoryCacheCost.h */, + 025F6CD14F8A03C0247CD91101DA4E5E /* UIImage+MemoryCacheCost.m */, + E40BE337022C0E201CFD11909AC04A07 /* UIImage+Metadata.h */, + D665B0960288F1AB2CAA57C49565BB0F /* UIImage+Metadata.m */, + 4DE018365296CA45CD04B4F12ACF79B6 /* UIImage+MultiFormat.h */, + DB5215F8336520B99C1610424CB483BF /* UIImage+MultiFormat.m */, + 354F2536ED984CA4D2D0557F44DD98EB /* UIImage+Transform.h */, + 85FF3550CBA0762C4B44F14EA8482B93 /* UIImage+Transform.m */, + F211C2870F2278DC285989F15F8DE349 /* UIImageView+HighlightedWebCache.h */, + F58011C4A837239A4C52F123400CF34B /* UIImageView+HighlightedWebCache.m */, + 9F0ACEA7C94BAFD5533A2014DF10EB89 /* UIImageView+WebCache.h */, + DA85B6E011624F9A8C4BE9DF73C97D7F /* UIImageView+WebCache.m */, + E2B66F3AA881E6E906B8158FA8490545 /* UIView+WebCache.h */, + D7C529B9A0FFFF11D0D42E675E2EC9D3 /* UIView+WebCache.m */, + 47492A13064C3475DCCF32BB8843589D /* UIView+WebCacheOperation.h */, + A691F74671359BA6CAC003C770AA9125 /* UIView+WebCacheOperation.m */, + 155B2767368B4C888D812077B0A69821 /* UIView+WebCacheState.h */, + D43D784C06EA26B53EBA084984DCD356 /* UIView+WebCacheState.m */, + 4FD170A3C295AF226F3250B01D6F56E0 /* Resources */, ); - name = SDWebImage; - path = SDWebImage; + name = Core; + sourceTree = ""; + }; + C95033D1C74FD29ED384ACDE1B5A4C61 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 073EAD40B8ABA5103E3F86CCCB5712EC /* Bugly.framework */, + ); + name = Frameworks; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { @@ -1807,93 +2291,225 @@ children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, B94D7768568A9992200DB461E8CF687F /* Frameworks */, - 3C8938BD791B748D62E0594E21A8F606 /* Pods */, - 1C8A19406FF58E9BA6BC427CA02E9857 /* Products */, + 2136BC57CF51B935E0762D56826646CA /* Pods */, + ABC988430FD741F4A5BE89BAF5CAF576 /* Products */, F7ED90CD818DD0484BF7DB0E1E3B9AB2 /* Targets Support Files */, ); sourceTree = ""; }; - D98E67C1E6047B33AD3281F951D96C7F /* Resources */ = { + D055DA6A5D7F1BEE0C6666800EF18325 /* Support Files */ = { isa = PBXGroup; children = ( - F320516E3A699EEF56C411E9C2DA9C29 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - DB6A5FFB077AA72411EB46B8A77A31B0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 70E91E9355FAF7D2A8CA2A2112F06A60 /* Bugly.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E11E673B56635EAB5EC9773B8D724830 /* MJExtension */ = { - isa = PBXGroup; - children = ( - B486D1944AF55BFAF5E8F8CDE6F8EB79 /* MJExtension.h */, - C342060C11E55E0DDCC3A84C8C1FBC35 /* MJExtensionConst.h */, - BCE109BED042388EE5FB3949ADA18281 /* MJExtensionConst.m */, - D9B1F5912311585292CF1DB19B5FF418 /* MJFoundation.h */, - 47E596E1EB48CB4E8DE37CC0D5122787 /* MJFoundation.m */, - BB20479CEB729CCB614B58BD2EFB3BB7 /* MJProperty.h */, - DF383723C6CD6F7B6FCFE6C752DF50AF /* MJProperty.m */, - D197698AA79A94AD39EC006BBB9D3481 /* MJPropertyKey.h */, - 3F39E9FDE611BCC2A514A77F1EB63E8B /* MJPropertyKey.m */, - 04549DFA210F3D3C27211535994000B3 /* MJPropertyType.h */, - D15A23E7684648249EA4D7C312BACC22 /* MJPropertyType.m */, - 96163189CC5AFA5E4E23D6B0B3EADFF7 /* NSObject+MJClass.h */, - 049541DC9203D75878CAF900D458CC34 /* NSObject+MJClass.m */, - CC6EC6E349C4E8476F9617E9150D43FE /* NSObject+MJCoding.h */, - 45F43707DFF3E5A8EFA1404F7259F5DF /* NSObject+MJCoding.m */, - 5210B0534D834B2EF86FDFCE90B73F2D /* NSObject+MJKeyValue.h */, - 2EEEDD3CF0530751FD80AFB402DAB153 /* NSObject+MJKeyValue.m */, - 364231170128CA2CD3F9589FE34C2FAE /* NSObject+MJProperty.h */, - 336D23D3AF9B2B8FD356A62D7B4A2A05 /* NSObject+MJProperty.m */, - AF4D3A8A4AF29616DFF2E40A94DA00AE /* NSString+MJExtension.h */, - A3A3B77B219A105E2636BBFACE42D7A8 /* NSString+MJExtension.m */, - D98E67C1E6047B33AD3281F951D96C7F /* Resources */, - 9F62E2D2D42206A4CD335DDB26C286FF /* Support Files */, - ); - name = MJExtension; - path = MJExtension; - sourceTree = ""; - }; - EAF375AA4ECFCEFB8A42837BED2CA767 /* Support Files */ = { - isa = PBXGroup; - children = ( - 00E5C0F46BD576A82A38738DB780C7D9 /* AFNetworking.modulemap */, - 83A4CDCDF549B87D4E437ED8A4615D91 /* AFNetworking-dummy.m */, - 23D7D1DC3E63FD87D87BE6C2EB198360 /* AFNetworking-Info.plist */, - 7D5B144E69C677553A95B3CCA57BC43C /* AFNetworking-prefix.pch */, - 0696D0619ACA95D8E9E7EFDC0CD595D2 /* AFNetworking-umbrella.h */, - 5104591E28208BB976FFAD3D7AFA2F58 /* AFNetworking.debug.xcconfig */, - C6F66997EF28E05B21EB7F13B379645A /* AFNetworking.release.xcconfig */, + 19C0B5EA65AF33AEAD852CEA9EAD8BA5 /* LookinServer.modulemap */, + 0DED0E6684133B62F60FD2914ADC6FEF /* LookinServer-dummy.m */, + 6850A551E126A5896DFA59DAC924879B /* LookinServer-Info.plist */, + 29B87A5985A35DC16F7168622665924E /* LookinServer-prefix.pch */, + F0FA893227558088DD8B6F6B81EC898B /* LookinServer-umbrella.h */, + ED49C9E461A9AD6242E9D6C45B28C8F6 /* LookinServer.debug.xcconfig */, + 521A6910A73CED7674A8C2BDACCC5DDE /* LookinServer.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/AFNetworking"; + path = "../Target Support Files/LookinServer"; sourceTree = ""; }; - EE64A145CDD38964AF4945D376B599A2 /* MBProgressHUD */ = { + D20A9C8D253A360DD3704ABE660F789E /* Resources */ = { isa = PBXGroup; children = ( - 2D069519EE909290F7C452231691CA88 /* MBProgressHUD.h */, - 8A6D5DE8BC7E18B47355B8494A426209 /* MBProgressHUD.m */, - 85416DF4AE2111F696182FA844F2611A /* Support Files */, - ); - name = MBProgressHUD; - path = MBProgressHUD; - sourceTree = ""; - }; - F364D65121D8297BD4970B4E36B87837 /* Resources */ = { - isa = PBXGroup; - children = ( - B9232C2E4F4A27C4FBD3F8EA3E351AF5 /* PrivacyInfo.xcprivacy */, + 9FBA40CC299718A9107CD58AD8DF1E96 /* PrivacyInfo.xcprivacy */, ); name = Resources; sourceTree = ""; }; + D8B7FEE3DE20CF364CA04FF9CE692AF3 /* Support Files */ = { + isa = PBXGroup; + children = ( + C762D70B7920FDB0727888032829A113 /* Bugly.debug.xcconfig */, + CCD9AF9E05C07333A3773AF6DA3CF95D /* Bugly.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Bugly"; + sourceTree = ""; + }; + E5ACCB285385454382DAD17C61A95525 /* Support Files */ = { + isa = PBXGroup; + children = ( + 8EC6D6AF46EB8C28B3638A857A4BAD97 /* MJRefresh.modulemap */, + 58EEF31E4381FCF9901BC539FC8B3664 /* MJRefresh-dummy.m */, + B7E125D544D8518E9D4747BE6FA05A52 /* MJRefresh-Info.plist */, + 0D76176C423BFBDD4960A5AF21E6DC5A /* MJRefresh-prefix.pch */, + 7C9E93301A1EC84E6AC23F6D46D2D7DC /* MJRefresh-umbrella.h */, + CD4FC6550E96D509C66913F5CC2EA900 /* MJRefresh.debug.xcconfig */, + 80BE1C77426CD4B7145AC8F9C385B53C /* MJRefresh.release.xcconfig */, + 5E1F7E8DBA64017C44ECFE06C9B1CC8D /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/MJRefresh"; + sourceTree = ""; + }; + E825B02CF6761B39104E0AB7BD283E52 /* lottie-ios */ = { + isa = PBXGroup; + children = ( + 5D51A288C831A6D54E41E17D68FDC10B /* CALayer+Compat.h */, + 5E3E2981EBC22397BB76AF331765E194 /* CALayer+Compat.m */, + 98D860BD18E73B0FFA81C68C7BFC337D /* CGGeometry+LOTAdditions.h */, + 491F20A2F26A8145341552081FC3F5E2 /* CGGeometry+LOTAdditions.m */, + E1F38216E4EE5B308BE7B8F5275B5828 /* LOTAnimatedControl.h */, + A43A1A8E34820B27EC0FF37153158388 /* LOTAnimatedControl.m */, + B16B01578F005D590657283A2CE7A9F7 /* LOTAnimatedSwitch.h */, + 56D2A0BD8B870DB83C7E0A0BA8CE24D5 /* LOTAnimatedSwitch.m */, + 5B75773FCC1158B46A3C3001E7FDFA8C /* LOTAnimationCache.h */, + F6C33DE2D8455E40EB1D6F82338CDDBF /* LOTAnimationCache.m */, + A321AA3CEF6D528E09B6BCCAB073B280 /* LOTAnimationTransitionController.h */, + 30569FA1EC7CBB3F016F8B51EBE46731 /* LOTAnimationTransitionController.m */, + E8BC47795E8BC62C28A79D8137B783EE /* LOTAnimationView.h */, + 7D163A736430857CD6723C0B841B086F /* LOTAnimationView.m */, + A9911591AEF6DACD65669F35DE7FC796 /* LOTAnimationView_Compat.h */, + 6026BB762BA16A1209DFA57F8EC18A74 /* LOTAnimationView_Internal.h */, + 39A92D0AF92DEC605DB954284FF6F144 /* LOTAnimatorNode.h */, + A9F64D8209A95F7EDEB2A03CF15FB6F5 /* LOTAnimatorNode.m */, + 94E892DBBFF37C0D4E5768CBB0E4F36E /* LOTArrayInterpolator.h */, + 9ADAD78200CCA86416BFF6F3CD3186B5 /* LOTArrayInterpolator.m */, + EB2D7C5B5FF1CED8FDA048FA769CD66D /* LOTAsset.h */, + 0ADF7CDFF2B4A4556008C32C26928527 /* LOTAsset.m */, + 6ADD179A4181B716094A3BA00A722A1C /* LOTAssetGroup.h */, + B5BB06B9629E7573A790AC5CDB462FC7 /* LOTAssetGroup.m */, + 6F6F069568EBFAC24459C7196A417B23 /* LOTBezierData.h */, + CCB70D51423C0005A24CC968EFBF177C /* LOTBezierData.m */, + 4C17150924CE83F6BA6F1FD6145F7215 /* LOTBezierPath.h */, + 2EFC6C70CB4E71F532E78C711BCF271A /* LOTBezierPath.m */, + 2E9C47111ED27E332992565A571B8E1E /* LOTBlockCallback.h */, + AC21C0F972D056C3C453A9A7A48BE015 /* LOTBlockCallback.m */, + 88295EA244124CB418613B6CA605F1DE /* LOTCacheProvider.h */, + 90323AA1DFBAF5BFB10D27B9FABC4094 /* LOTCacheProvider.m */, + 0A820A148846D1DD18FFC9902C96CD5C /* LOTCircleAnimator.h */, + E6D32A1FBB11D18DDF0B3E5E4975F7F7 /* LOTCircleAnimator.m */, + F8FD4D8E7CBA2328A4C35B1959662111 /* LOTColorInterpolator.h */, + 98A6230674D154A31BA6EE34F4B218A4 /* LOTColorInterpolator.m */, + 59A97DA96A702C328BF01C96399051B6 /* LOTComposition.h */, + B16B9D03F4DDA52CF705C62F92479EA8 /* LOTComposition.m */, + 5B04AA19A4116D82F80C002622150160 /* LOTCompositionContainer.h */, + A49601201B530664BB6A82AA1BB75C48 /* LOTCompositionContainer.m */, + 6F1B3D1B25B8C51A1D1CEAAD09874870 /* LOTFillRenderer.h */, + 5A5B6B55042DB42F252D42C32640C375 /* LOTFillRenderer.m */, + 6BB5AD9626F0C9D627040863D614F047 /* LOTGradientFillRender.h */, + F6CACAA41BF0E1D35C324D39ED2A0702 /* LOTGradientFillRender.m */, + ED44958C71D2C6D449D720D22E09F669 /* LOTHelpers.h */, + 1B5B21AFCADF2084C13FE18D9005357A /* LOTInterpolatorCallback.h */, + DC809D5F5A3488A8C92D46C51D8EB140 /* LOTInterpolatorCallback.m */, + 536D601C9C957D8965AC17CEF27A937B /* LOTKeyframe.h */, + CB16B2529A179FB02230F7E909787127 /* LOTKeyframe.m */, + DD4BD5F9BC7ABC0F4807A3F7808B3EE5 /* LOTKeypath.h */, + 3FF6AF03494CB12E91A424BC6E068CFC /* LOTKeypath.m */, + 45920C19D3CF59590B6DE6FBD0F6421A /* LOTLayer.h */, + FF2F6A3AFF295DD9D127E392996B5A22 /* LOTLayer.m */, + 91D82FDDD77B5B33B81C33FB2099851C /* LOTLayerContainer.h */, + 50F29DD5AEFE9E568F6ACA946F690CAA /* LOTLayerContainer.m */, + 17C0D854E09D16BB681D45ED327BAC8E /* LOTLayerGroup.h */, + 557816D4AECF88136ADDDAA4485A49A9 /* LOTLayerGroup.m */, + 02A3FB9606ECFAFB7E0ADD60341CCF48 /* LOTMask.h */, + E5A48023F7A772224B723167DA19F405 /* LOTMask.m */, + 0AF554DF7D95156FCCD2EA302AA0138F /* LOTMaskContainer.h */, + C1A6BCD959F17DB2873035971D8D9032 /* LOTMaskContainer.m */, + 6C528A38E039D43F23B098B826864F3D /* LOTModels.h */, + B3A62AE37BD18B6AA56FA1A3C995376D /* LOTNumberInterpolator.h */, + 523A4FED0C4F689E8EC3539D9AE5C995 /* LOTNumberInterpolator.m */, + E08B7E8CFE4255500AF5EA1138BE117F /* LOTPathAnimator.h */, + F956DD5E7DFC47C6819F4AB8E782091A /* LOTPathAnimator.m */, + 3FF4A465A71C22D855FFE8635EE239FE /* LOTPathInterpolator.h */, + E5378B0C2C473D252DF9777266E174D1 /* LOTPathInterpolator.m */, + 98E804E7DBEDB67735C5EE9E4C401019 /* LOTPlatformCompat.h */, + 3596AC524204321ADEC9BB7FBBB1DAB0 /* LOTPointInterpolator.h */, + FE7F34046B9BD8DB88390AC9555EE37E /* LOTPointInterpolator.m */, + 05F37F51FAFA6702910C4E7E1D2616BB /* LOTPolygonAnimator.h */, + 332ED2DB44E7CA9727108143D82CFD47 /* LOTPolygonAnimator.m */, + F6B2C6B91D32AD5A685ABC034ECE1811 /* LOTPolystarAnimator.h */, + E2EA7A82A59375A3B3BC245067E1E39D /* LOTPolystarAnimator.m */, + EF103610E3EA9CE9AD51BD469212581F /* LOTRadialGradientLayer.h */, + E07F0A51623D562E50DD3FBE8698C739 /* LOTRadialGradientLayer.m */, + 340A57C04C907722A2529BC7E5F00245 /* LOTRenderGroup.h */, + 4949909C0F4226098058AD880A8C6772 /* LOTRenderGroup.m */, + 406B19CDA73B6B348EB34EDE3206DE05 /* LOTRenderNode.h */, + 9E791076E93327531D61CDE166C6D0F3 /* LOTRenderNode.m */, + 4610C449B2D89871C4723DF50B15525C /* LOTRepeaterRenderer.h */, + 66B7F7ECFD89436FBF7A6FE70225F71E /* LOTRepeaterRenderer.m */, + 14EF04750B2EB7A7F73D729913572ACC /* LOTRoundedRectAnimator.h */, + 387311E074CEB0F9F817707896689271 /* LOTRoundedRectAnimator.m */, + D34846EAAF5506AE63C9A854D5FDF774 /* LOTShapeCircle.h */, + 7EA930B7283346D0F5B2C28086A3A09D /* LOTShapeCircle.m */, + D4BF743D5AAC5150CFA4C3D65F74747B /* LOTShapeFill.h */, + 27B5D6B05B61EFEC8D039AA8C973FFFF /* LOTShapeFill.m */, + C28EEAD1B0141A37B9B19F055931FA17 /* LOTShapeGradientFill.h */, + 8B47DC622EE4FB6E6AC0FCBFF5CF804F /* LOTShapeGradientFill.m */, + 454998BDBA877E6A94CA2DFFA4D13CCE /* LOTShapeGroup.h */, + EE87085572BA96EB92603E1A53A0E960 /* LOTShapeGroup.m */, + E9681148E66F6D1870DA59EB4F7EB722 /* LOTShapePath.h */, + 6E70A06DB6CF6E8C78B17F928A289B0C /* LOTShapePath.m */, + 5F54B9BD0AC7DE1FF9332ED5587CD502 /* LOTShapeRectangle.h */, + 57F1065D9927A1CEB37170CF303120F8 /* LOTShapeRectangle.m */, + 11B78563CFB78FEC5CB39AE8C4F051E6 /* LOTShapeRepeater.h */, + D1720047A5DCB4CE5426151172A9CD87 /* LOTShapeRepeater.m */, + 09A26F9A95E56A246619BCFD34149214 /* LOTShapeStar.h */, + DF3A384C92120AA95174EEA0DED570DF /* LOTShapeStar.m */, + 18DC9B08E606765DE6D26A767B58AD1A /* LOTShapeStroke.h */, + 137A4E94A88AFED8DF9942FCD8031663 /* LOTShapeStroke.m */, + E7B56BED0A5A58B91DF8C927F2A5A03E /* LOTShapeTransform.h */, + 984371CBE2AE756DB942C044D7C2B778 /* LOTShapeTransform.m */, + C6A761A140C4A617FDABF4AAF51D35D2 /* LOTShapeTrimPath.h */, + 0F6F5579B9644EB3E8A7772977F641D4 /* LOTShapeTrimPath.m */, + 4C510DEA5D159BE22C03E3316356C514 /* LOTSizeInterpolator.h */, + E589E7D85F68B187C941BFE8E5981A01 /* LOTSizeInterpolator.m */, + 682F255D431FE7D62FBF3F62694B4D15 /* LOTStrokeRenderer.h */, + 4F43874C95D4DEC4EE3D9C90BD47FF28 /* LOTStrokeRenderer.m */, + F5686BE73395FF06B0A656EB2392ACC0 /* Lottie.h */, + 44FF37EE3087F83CC98A26E173129B85 /* LOTTransformInterpolator.h */, + 6257AF1656068251710E18110E56E409 /* LOTTransformInterpolator.m */, + DD68ECDF497DD8B434F9C7E5B170807B /* LOTTrimPathNode.h */, + 94F61108FDF5859A2E8AA134032032C0 /* LOTTrimPathNode.m */, + D45E540AA99BF8CD5089ED00B94033F7 /* LOTValueCallback.h */, + 5B4B48C725B5559AFC3A087A2E7D5FDF /* LOTValueCallback.m */, + A49F73C4891559F8823A2E496F8A7BE3 /* LOTValueDelegate.h */, + 38B5EB5EDEA91AF4FC11989687A8FAB0 /* LOTValueInterpolator.h */, + FC94B8D2FBA4BB61F0F6B44861B426CD /* LOTValueInterpolator.m */, + 63462E5F7111A6A05C8005EE2DB1D22E /* NSValue+Compat.h */, + 66C4549821E4DC5B1FB23405A2A40518 /* NSValue+Compat.m */, + 113192C829148EF6BB5232DC8A352284 /* UIBezierPath.h */, + 9265F447C9314627E92134CEBB84E26A /* UIBezierPath.m */, + 22B6BB9CDA19A8DDDA9A41F3FD59CE86 /* UIColor.h */, + CAD861249B9D25E9864236D2DFDC4D44 /* UIColor.m */, + 2D1B0275ADBEF79FAE38A1950474FFE2 /* UIColor+Expanded.h */, + F5D20445A4668215A42B54970DB1F581 /* UIColor+Expanded.m */, + 989A8FF813C2CD7585596F518E6073B5 /* Resources */, + 3539F46A28EC2951D38D46592ADB44C7 /* Support Files */, + ); + name = "lottie-ios"; + path = "lottie-ios"; + sourceTree = ""; + }; + EC687B1F66B3D393AE3CF105B49C6C34 /* Resources */ = { + isa = PBXGroup; + children = ( + 61FFF7A27CE20B4852E6656680890667 /* MJRefresh.bundle */, + 6B5378102B2D099A0AA567282D5FB3E1 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + F212691013EFD7572885EA363E01FFF6 /* Support Files */ = { + isa = PBXGroup; + children = ( + C88707F364061CAAEA4FD7BC31BC30C6 /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */, + B1B35137892BD8C3891F75903E2B287B /* SDWebImage.modulemap */, + 8B901955271B5EEB0A054B4C18AAC88A /* SDWebImage-dummy.m */, + 6ED6845F49525291F386EAAAA319371B /* SDWebImage-Info.plist */, + C6F17BA617ECF7492875C43913307682 /* SDWebImage-prefix.pch */, + 5F139A935EDC4C35FBD6F43FD93C0E27 /* SDWebImage-umbrella.h */, + DC6DC213043BFCD5FF2737B128B095F8 /* SDWebImage.debug.xcconfig */, + 67B707C443F1C733E296074798607AC1 /* SDWebImage.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; + sourceTree = ""; + }; F7ED90CD818DD0484BF7DB0E1E3B9AB2 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -1903,164 +2519,19 @@ name = "Targets Support Files"; sourceTree = ""; }; - F8863687E232B36E6A3336B80CEF9AEF /* Reachability */ = { + FFF8EE8CEC31528AFE85F8D6CE206147 /* Support Files */ = { isa = PBXGroup; children = ( - 62E02B7B42A91CD6887912774FAE6528 /* AFNetworkReachabilityManager.h */, - 0D18C326A9F4C285AD294832344E63FF /* AFNetworkReachabilityManager.m */, + 4340A919516C86B8ABCCED87AA263BB8 /* AFNetworking.modulemap */, + 6362C2F0D448F7CF1E20C133D2F2911F /* AFNetworking-dummy.m */, + 47D6E0FBA396AFC71ED9719BED618027 /* AFNetworking-Info.plist */, + 16593D52092C42002F8CAB487C78A27C /* AFNetworking-prefix.pch */, + F3868A15C29AC79953551625F15DCFDC /* AFNetworking-umbrella.h */, + 2353F897342612360614276D7D592737 /* AFNetworking.debug.xcconfig */, + BC10FCFD9ACA73AAA42A4C6AA4707349 /* AFNetworking.release.xcconfig */, ); - name = Reachability; - sourceTree = ""; - }; - FB435B3C1ABA904B9D4AEBB59855C935 /* Core */ = { - isa = PBXGroup; - children = ( - E857EC016B703D1261AC73360907C980 /* CALayer+Lookin.h */, - 3BBF905BC343AA0D52B6BC0B1E5B22E9 /* CALayer+Lookin.m */, - 26476CAEC54A4CE04264494F816DFD2C /* CALayer+LookinServer.h */, - A99D2B8B886EDA66D95608FD72CE97AF /* CALayer+LookinServer.m */, - 4FD8426A1028406F5A9C4E27D5C9E76C /* Color+Lookin.h */, - 9278559A57D46FAC97B2480A76E574BE /* Color+Lookin.m */, - 2039E8AAF8AAC77E31E425C61871263D /* Image+Lookin.h */, - 19CD19C5B1822DA77E4C7C9F454FD5D5 /* Image+Lookin.m */, - FAB9874FA4C241C24657D3A825C00C66 /* LKS_AttrGroupsMaker.h */, - EA281F7D07872BD2CB3C821E84CCC544 /* LKS_AttrGroupsMaker.m */, - 477B43B19C3181419CE0D39929320355 /* LKS_AttrModificationPatchHandler.h */, - 79EEB00E9ED2C742987150EA5E0B1341 /* LKS_AttrModificationPatchHandler.m */, - 613D22FE29FDFD98F1BA3415B19FB040 /* LKS_ConnectionManager.h */, - 5ABD1279233951A8EAE905C43AD033A4 /* LKS_ConnectionManager.m */, - 9D58792A3DBAB3667630D1FF53DDFB8D /* LKS_CustomAttrGroupsMaker.h */, - 667106A3B29FC2624F444E79272C8235 /* LKS_CustomAttrGroupsMaker.m */, - 834B6D6A1ACFBDDF049322F2ED0C17DE /* LKS_CustomAttrModificationHandler.h */, - FB260AFEB0CD406D8CDEDE623A1369CF /* LKS_CustomAttrModificationHandler.m */, - F98B3E6FF4A7A436AEB00C4FE95820A2 /* LKS_CustomAttrSetterManager.h */, - 1D74E044AA7CFE331B6C3B53D98B1022 /* LKS_CustomAttrSetterManager.m */, - 6F10AABF341F29547C8D1C780B3F8861 /* LKS_CustomDisplayItemsMaker.h */, - C08BFCAD6B6021A9C9686DA64A6CF1AE /* LKS_CustomDisplayItemsMaker.m */, - DE6C055C722C44DA0E562F93906DCD34 /* LKS_EventHandlerMaker.h */, - 7CB82C5681E372AE74735E8F3B7211E5 /* LKS_EventHandlerMaker.m */, - DECAD058B2FE8CD24CC1022B0A1523AB /* LKS_ExportManager.h */, - A306B5D1B1BD0232E2121BA1E0EA27F9 /* LKS_ExportManager.m */, - 7E82EAB687527F885E79D9835727B3F8 /* LKS_GestureTargetActionsSearcher.h */, - 9F1EE18C1314EB74EEB6B6392E8EFB08 /* LKS_GestureTargetActionsSearcher.m */, - 567AA7AB9514E985494C554A1802C03B /* LKS_Helper.h */, - 371FD070C447028E0DC76F07BB442FC4 /* LKS_Helper.m */, - 5E355B215CED31C4C6EF33EEB9E95B38 /* LKS_HierarchyDetailsHandler.h */, - 94310BE9068195ADA7842BD0A9A7F782 /* LKS_HierarchyDetailsHandler.m */, - 52FBF3084E82AF80B1B017FB5240AF4F /* LKS_HierarchyDisplayItemsMaker.h */, - 3E2B86406A2B5383183DAE9ABBBB3893 /* LKS_HierarchyDisplayItemsMaker.m */, - E91E93486D40A052515660F00B079B5A /* LKS_InbuiltAttrModificationHandler.h */, - 37559870F51779045F8C7A57C1303E2D /* LKS_InbuiltAttrModificationHandler.m */, - 0075507DF323DF510CA1115DE2B33C98 /* LKS_MultiplatformAdapter.h */, - 31C69A4489CC7299F114CDEAFBE0DE3C /* LKS_MultiplatformAdapter.m */, - FF266D90F27C22E50821C68FB0B959D8 /* LKS_ObjectRegistry.h */, - 30361FA11468C74A598363E37D30E56C /* LKS_ObjectRegistry.m */, - E4000AF0B9EEE3F891ADD766B1967BD3 /* LKS_RequestHandler.h */, - 68C023D8DAEB5C5E7F36F7020DDBFE63 /* LKS_RequestHandler.m */, - 46771EF8828C8A7519CEFD7A8DF062BE /* LKS_TraceManager.h */, - A3868E0511721B009DE0A628C978E4AF /* LKS_TraceManager.m */, - 6FD83C0A67C6DD93C76CB6563151D889 /* LKSConfigManager.h */, - 4B2A98ADD6BF259F1E366B570C576632 /* LKSConfigManager.m */, - 341D877992B274AC6FD93AB03542E561 /* Lookin_PTChannel.h */, - 93AFD572FFECC065D5DF0E8764C35B66 /* Lookin_PTChannel.m */, - 0D703CF356A8E2B3B3665722366223A5 /* Lookin_PTPrivate.h */, - 1550F0B5EA5360BFA35606256AB6EF51 /* Lookin_PTProtocol.h */, - 84E9E0A3D552DFF9EC45D14794237342 /* Lookin_PTProtocol.m */, - 4211A99A6EE6255E875FA46E987F2128 /* Lookin_PTUSBHub.h */, - 9C8E3573AF9C6E24E9DFBDDB57A91B44 /* Lookin_PTUSBHub.m */, - 2F6981AC25702BE9417B498391042242 /* LookinAppInfo.h */, - DE5E3242D0D245F39B1349B5C4819144 /* LookinAppInfo.m */, - F74FD66E160DEA3B30F3C017DE8ED1BA /* LookinAttribute.h */, - 7FCB45CBC3B45614560DA456506F73F1 /* LookinAttribute.m */, - 06660480BC631DCE06583A85704487AB /* LookinAttributeModification.h */, - FD1216744C111B10EA2988454A525213 /* LookinAttributeModification.m */, - 1948F2AFCD4F7087CA46FB78E5A05ABD /* LookinAttributesGroup.h */, - 594BEBF4113035634E37CC4FC2A11D62 /* LookinAttributesGroup.m */, - 40B6DD67F49B0103232B5D6B727392FA /* LookinAttributesSection.h */, - EF6193F470BF021CAED5E3E0DC4F602E /* LookinAttributesSection.m */, - 94CD4DB147D9FC14A9FB75335D8AAAF6 /* LookinAttrIdentifiers.h */, - 75E99E8BA24E841D85C9E942E3654D62 /* LookinAttrIdentifiers.m */, - B12DF9FA146221C01FCE0D22DDBDC890 /* LookinAttrType.h */, - 0301A3F865A2919DCD43EE9D0DC363A5 /* LookinAutoLayoutConstraint.h */, - 528C15198BF77FCE909FB6A717EA8C53 /* LookinAutoLayoutConstraint.m */, - A7178BC144BA120067B45EC042E2D156 /* LookinCodingValueType.h */, - 5212AF1887982114A494FF962BEF5A35 /* LookinConnectionAttachment.h */, - A6EB4E3885146B9E8EBACA05C540E733 /* LookinConnectionAttachment.m */, - 9BF2F8A5A2E35CC31448E86BCF471F49 /* LookinConnectionResponseAttachment.h */, - 3B6B095661E36C4E8A066559D4D5AF33 /* LookinConnectionResponseAttachment.m */, - 2F154763B55BC95D1F3E0C64970B8D48 /* LookinCustomAttrModification.h */, - 4730B0C65CA50BE6D828887D7CC8EB9F /* LookinCustomAttrModification.m */, - D4D2347D4EFB2E5610773AF965AA8399 /* LookinCustomDisplayItemInfo.h */, - 1C5B4FB13625B33C4ABB17DDEF05C782 /* LookinCustomDisplayItemInfo.m */, - 713E37659AD7D79DA6664C3D3ECF01F7 /* LookinDashboardBlueprint.h */, - 290A1387E4C301A25D8613FBB0DCEC6A /* LookinDashboardBlueprint.m */, - 6E6089EEBB83334AD3EFA96BE408F86D /* LookinDefines.h */, - 7597119135479FEF90DC7CA9DDBF03A6 /* LookinDisplayItem.h */, - E9ED096883562D4C47E188D0E5CB3065 /* LookinDisplayItem.m */, - A1BB512E1904C9AC07E6CEBA4DE525DB /* LookinDisplayItemDetail.h */, - DC3E4B841669D08E886FD8D7A86C654E /* LookinDisplayItemDetail.m */, - F746B8A0D89C293CD78D1EE71CD25FF1 /* LookinEventHandler.h */, - 189A631A2ED6331F0A226846AD73B1E4 /* LookinEventHandler.m */, - 6DAD9E82D42212E9D52E28737BC21479 /* LookinHierarchyFile.h */, - EFD8B43671F8A160934DA73D3C45B4C0 /* LookinHierarchyFile.m */, - 9C9BCDBD08949F0C3053B9F87567E0B2 /* LookinHierarchyInfo.h */, - 56A3EB69345768D61D52161327AE66C8 /* LookinHierarchyInfo.m */, - E05CD820CF8075CB902341061803D784 /* LookinIvarTrace.h */, - 872090FEDB94946E441D4F936A1357C0 /* LookinIvarTrace.m */, - E70A8D54BBD1266CC7CAFB4BD5CE317B /* LookinObject.h */, - A3048EE57AEE9C3B5FDB98C9E7DF4BB9 /* LookinObject.m */, - 30A10CFE082F8338A031688B47CDED17 /* LookinServer.h */, - FEBDC1C9F54DE3E90674A96F19B3458A /* LookinServerDefines.h */, - D23D41020809113858D4CA46059797CF /* LookinStaticAsyncUpdateTask.h */, - 7DDE67F73A61A7328413374AFFA92E85 /* LookinStaticAsyncUpdateTask.m */, - E785CD9E03330FEEAB8EA2F65DA92853 /* LookinTuple.h */, - D03549B19B7C1700178CF12088FCE44C /* LookinTuple.m */, - 785DDFE2F3C7BA8AEDE2278087F506EB /* LookinWeakContainer.h */, - F9B85917A028A675DFE95B885791EDFC /* LookinWeakContainer.m */, - FEE404F0AEA8371C4FCFE3F576AA5835 /* NSArray+Lookin.h */, - 49A24CBDEFCE6B22E2D355C6D04AC9B4 /* NSArray+Lookin.m */, - 9F2C6DE995A9BCF5E418479898442088 /* NSObject+Lookin.h */, - BA48F14A970C2FE9AE9B9A3F4EF27D84 /* NSObject+Lookin.m */, - 87D20D63606C6DC8B53F345069126C44 /* NSObject+LookinServer.h */, - E66FFAE76E02A3342AF857261F059F70 /* NSObject+LookinServer.m */, - FA2246CD5BC5C3E37CEC58BCA4848181 /* NSSet+Lookin.h */, - 3E5219BC7E7BF5C405E48CC237D2EDC2 /* NSSet+Lookin.m */, - 52EF359F996014A062F3A2945F10438A /* NSString+Lookin.h */, - 3ED91326A0371ACE08A353BC67F60F6B /* NSString+Lookin.m */, - ED81CDC30BE2F7BBA09422B3CD1BDF85 /* Peertalk.h */, - 220B8AB16FBD2158AB55D35E9376D13A /* UIBlurEffect+LookinServer.h */, - D950E8533947A1D8B1CABC80463AFF52 /* UIBlurEffect+LookinServer.m */, - F81A89C6E769F9B774524A9FE4BA70B5 /* UIColor+LookinServer.h */, - 1D4236904A41DC2950754F5BE583BD4A /* UIColor+LookinServer.m */, - 241D729CBB4E30C3E09474F7F34CB9FA /* UIImage+LookinServer.h */, - F2087695EC0958A50E2C65A5D2E03159 /* UIImage+LookinServer.m */, - 6CAEA0BC49D62C0D220FA986A5391EEC /* UIImageView+LookinServer.h */, - A6B89FBB0AA4A7BD7E16AFF20A519DC2 /* UIImageView+LookinServer.m */, - ECA6154AE35962F20A086F5A3633C0CC /* UILabel+LookinServer.h */, - C23D52958B18447DC5C865BB12951C58 /* UILabel+LookinServer.m */, - CAE0A8B09C0AF83117C6BC9602D5D41F /* UITableView+LookinServer.h */, - 7584B9C7664B986D7C6582FD3280C473 /* UITableView+LookinServer.m */, - AB70C7432DDB8346C9DB4A27C7C7AEEB /* UITextField+LookinServer.h */, - CEC88A03608F444860F81FB5EB689938 /* UITextField+LookinServer.m */, - E9FADEFBF123E3EB09754AA63F0510E1 /* UITextView+LookinServer.h */, - D54A6D034409C4B729B7DBA2D502B89D /* UITextView+LookinServer.m */, - 12119FD9C09B77E5C8A003238C89E88A /* UIView+LookinServer.h */, - E3ADFF983A9B025AF718C3D24404E480 /* UIView+LookinServer.m */, - 2567115C715DFD2B942FF9386C729778 /* UIViewController+LookinServer.h */, - 5AF7E49BBE304E0327E319036BE5671B /* UIViewController+LookinServer.m */, - 594925FC6BBDEA3002D153F167630F93 /* UIVisualEffectView+LookinServer.h */, - 2731C084E8B9BB6A54629DDFEBD14EA1 /* UIVisualEffectView+LookinServer.m */, - ); - name = Core; - sourceTree = ""; - }; - FD75246711B9ACD8C080F9752A75506E /* Resources */ = { - isa = PBXGroup; - children = ( - 352F463EFB3454F98E285A844376EC28 /* MJRefresh.bundle */, - A6057C23DD0D9C9A5559F8F0DC47A97D /* PrivacyInfo.xcprivacy */, - ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; /* End PBXGroup section */ @@ -2313,11 +2784,79 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5E9A96655812158910B2D46F18F4983F /* Headers */ = { + 4C346EDEE602B2E59070366C4C732043 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 891AB9476B659A3490DCE45A52A8D132 /* Pods-keyBoard-umbrella.h in Headers */, + 3C2B4B72531D6B0AE0D2BEB7F93A515D /* CALayer+Compat.h in Headers */, + 51CC7C6197A0823DE8E02DDD2E55A3B6 /* CGGeometry+LOTAdditions.h in Headers */, + 71C728A8D0E7F5EAD622B20F78E49BB8 /* LOTAnimatedControl.h in Headers */, + 5A203479B1425E12AFCF21136CF72899 /* LOTAnimatedSwitch.h in Headers */, + 54978C75551DC86C204030ED9917526E /* LOTAnimationCache.h in Headers */, + 359971634D802DEC7AE71B5434346E2A /* LOTAnimationTransitionController.h in Headers */, + B7F81B5227042803A3624B81691C3310 /* LOTAnimationView.h in Headers */, + B71A05DF397B1283E7D92875312CE33E /* LOTAnimationView_Compat.h in Headers */, + 8446D9DBB13D294C267A12BB9677A31B /* LOTAnimationView_Internal.h in Headers */, + 352BC811AC0805A07CD021D8AB11CA19 /* LOTAnimatorNode.h in Headers */, + E8249FE30F9FCBB3ECB9FF5F77AD549F /* LOTArrayInterpolator.h in Headers */, + 47E2AD08EFCA06507DE140CC000DB7E9 /* LOTAsset.h in Headers */, + B3EFFC7FACEBBE732E39831D547B136C /* LOTAssetGroup.h in Headers */, + 76F5221887D040D5DE3321B338D5D0E3 /* LOTBezierData.h in Headers */, + EC09CB1455EC2C7F381E7FAA4563E5A5 /* LOTBezierPath.h in Headers */, + 29C4AAC4486769CEAD3775998E69B563 /* LOTBlockCallback.h in Headers */, + E696B17E5E67AF3D3CE659B17DD30EA7 /* LOTCacheProvider.h in Headers */, + E7BF76944D34CFE29590086B1CC1CE9B /* LOTCircleAnimator.h in Headers */, + 1AF38132544C8153908D92971F966999 /* LOTColorInterpolator.h in Headers */, + C4857A1AC7FD3DEC64A3317D83BFB303 /* LOTComposition.h in Headers */, + C6757D4E3CD09BF8CC6F623B4CC11202 /* LOTCompositionContainer.h in Headers */, + 1F2DE8B4AB97D531543FE3311DED9559 /* LOTFillRenderer.h in Headers */, + 478C9C8BE6B013E3BD04DF0281F090A6 /* LOTGradientFillRender.h in Headers */, + CBFCE4E0A58E61AF87B64990B684E63C /* LOTHelpers.h in Headers */, + 91E1DE283CBEC23FBD4D2DAC02F4761B /* LOTInterpolatorCallback.h in Headers */, + 3CC90ADD40D7338A8E033B42173D1F8B /* LOTKeyframe.h in Headers */, + 14BE7C4F2B82AEDB7C3F99330E307C8D /* LOTKeypath.h in Headers */, + 9C76C5296BEF3FFCB395328AC44A33FF /* LOTLayer.h in Headers */, + 490E037377AA921F9CA1934E3217944E /* LOTLayerContainer.h in Headers */, + 7AD26F49DB81BB5A881A9B5EB1C93A4E /* LOTLayerGroup.h in Headers */, + 61A0411839D57A41DF72C0522CBE0EDE /* LOTMask.h in Headers */, + 93C3CB83BDB4A866BB069674F1F299F3 /* LOTMaskContainer.h in Headers */, + 59897E1C013473AA9897D22E1DC1B0DE /* LOTModels.h in Headers */, + AF9CCC7D761E6D6EB33B720BD0BC5E87 /* LOTNumberInterpolator.h in Headers */, + 547574C59B156DB34FA21D42A7FCE15A /* LOTPathAnimator.h in Headers */, + 45F85605A99A15CB2A1CA551651FB85D /* LOTPathInterpolator.h in Headers */, + FF3F01AE0874C09BE302D9D7DC36A120 /* LOTPlatformCompat.h in Headers */, + 22527055DF0B42E57A6EA765C8E911E0 /* LOTPointInterpolator.h in Headers */, + C66915E06137FEAD1548286F1166967E /* LOTPolygonAnimator.h in Headers */, + 5E784FF93B1E17745481F83F703FFDA1 /* LOTPolystarAnimator.h in Headers */, + CF0DD3F5386ED73063CD3A703391B91D /* LOTRadialGradientLayer.h in Headers */, + 05199FC8B17B8B50F4BCDB4D96B92235 /* LOTRenderGroup.h in Headers */, + 668EEB6E53045B45143738095124C209 /* LOTRenderNode.h in Headers */, + 46D642FEC0C2E9ED4B54CEE2934BD27C /* LOTRepeaterRenderer.h in Headers */, + CEB72739300F5625A20133D701DEA206 /* LOTRoundedRectAnimator.h in Headers */, + DF1476A560849021823652A999FE5E53 /* LOTShapeCircle.h in Headers */, + 55F5FEE701A0250639C42FE91A3A6ADB /* LOTShapeFill.h in Headers */, + 2328D9EAA575BF81478627B849D1FC53 /* LOTShapeGradientFill.h in Headers */, + 411DF0E2453D8FD9A6DE744FF53BAA0F /* LOTShapeGroup.h in Headers */, + 888A30123A40AD6B41855194C7353882 /* LOTShapePath.h in Headers */, + B33A7774BCB3AE8C8F842F5DE3081EAD /* LOTShapeRectangle.h in Headers */, + 028209CE025722D4E6B3F56BDE1CFEF5 /* LOTShapeRepeater.h in Headers */, + C678DCBD7362D41A593582C0624C26A9 /* LOTShapeStar.h in Headers */, + D16F2BBDE5439D6EB76B758BF3664233 /* LOTShapeStroke.h in Headers */, + 6DB1E6005FBB01631F50D31160ABE817 /* LOTShapeTransform.h in Headers */, + 620CD28CECEF7D0DAFD0B70170E030D5 /* LOTShapeTrimPath.h in Headers */, + F614312EC3EC21EBCCDCDCD0CA6CD3DD /* LOTSizeInterpolator.h in Headers */, + 669F24C6936E68DA3341C2C9324DB127 /* LOTStrokeRenderer.h in Headers */, + F568FAD54619C3EDCDD9E12558E310C0 /* Lottie.h in Headers */, + 3E9B436EDC499153F0E1C8895C53F6BE /* lottie-ios-umbrella.h in Headers */, + 3993B39A8B20743278F1E08DA9CC47D1 /* LOTTransformInterpolator.h in Headers */, + F24B35D5D8C959EDB299EE9DA3ECF375 /* LOTTrimPathNode.h in Headers */, + 225C0CA5EF8B40E6125231DA85C9452E /* LOTValueCallback.h in Headers */, + 29F8D3CDA61AC705A5BDB4079F6187F8 /* LOTValueDelegate.h in Headers */, + CDE3764656628A6725A23485D09EBCB2 /* LOTValueInterpolator.h in Headers */, + 6A2973BCC0C5732CAABF4F9B83B1B1BC /* NSValue+Compat.h in Headers */, + 5799E5BCEA50086A53F5DB5D7130B431 /* UIBezierPath.h in Headers */, + 8E75E3BCD5E5A3DE63FD7D93AC456232 /* UIColor.h in Headers */, + 0C3167C8509E9C5E8F8571FC3D2A55BD /* UIColor+Expanded.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2338,6 +2877,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C37C55DABDCEE31755BC09435F9BBBB6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B3124A2A9478DF50DFF54CC64084DFEE /* Pods-keyBoard-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C6390AB04A018D57637AAB0718C31A83 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2385,27 +2932,64 @@ productReference = A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */; productType = "com.apple.product-type.framework"; }; - 18BD026D2210082A239FC15D072FD5BF /* Pods-keyBoard */ = { + 0B967D7F8561D42493EE289EC8D450D1 /* lottie-ios */ = { isa = PBXNativeTarget; - buildConfigurationList = 3FA2BE14A4014E20D1803ECC0CEB5A7F /* Build configuration list for PBXNativeTarget "Pods-keyBoard" */; + buildConfigurationList = A5E591F0C1A7CDA8EC0F6E54E0BD26D2 /* Build configuration list for PBXNativeTarget "lottie-ios" */; buildPhases = ( - 5E9A96655812158910B2D46F18F4983F /* Headers */, - 87D36E846DA0820C15C53178D809C27F /* Sources */, - AC60AAEBCF4A484AB8DAD9EBCA30DBD7 /* Frameworks */, - B3CE18BE6ADF72F2E31CF5989ACEA7C5 /* Resources */, + 4C346EDEE602B2E59070366C4C732043 /* Headers */, + C7001D67F681307D3CBDDEBFC6BCAD16 /* Sources */, + A7DA7233D8A35EF3A8BBC2E77C158B54 /* Frameworks */, + A6CDD9C94C7E0707CDB82F94A446AB89 /* Resources */, ); buildRules = ( ); dependencies = ( - 69F880D20E49FF278D9D99F0FC359C80 /* PBXTargetDependency */, - 071F326A1012E3F537E82D4600D6099B /* PBXTargetDependency */, - 3CC71AA09CD8D91F7CAC51C8C0C3D8A8 /* PBXTargetDependency */, - D4796534CC93D6F34DDBB3E449125A23 /* PBXTargetDependency */, - 575EFC27A8B3BE6F6EF85229FA04A8F6 /* PBXTargetDependency */, - 8343E87E690EAE8ED5D426D9B97081C7 /* PBXTargetDependency */, - 4CEDC3503EBC64FA8AD4BB751A1257E2 /* PBXTargetDependency */, - EF01B3D5C4798C26DB6A90866EE03225 /* PBXTargetDependency */, - 09B11A1954CF8173776EC7F7B6571224 /* PBXTargetDependency */, + FBC0FC3F8AD85320F7AC2235FCEAE5F1 /* PBXTargetDependency */, + ); + name = "lottie-ios"; + productName = Lottie; + productReference = 51BA97E8B5085EFFB47BC9C0B785CEA7 /* lottie-ios */; + productType = "com.apple.product-type.framework"; + }; + 136FDD82F26C77E0886BF3ECAE2ADFC9 /* lottie-ios-Lottie */ = { + isa = PBXNativeTarget; + buildConfigurationList = 41C8EE468668D6C2079F555F26806DC4 /* Build configuration list for PBXNativeTarget "lottie-ios-Lottie" */; + buildPhases = ( + E3122A10040C9A9869F8077BEC1D112F /* Sources */, + 5EDDE57D90E5605FA0AEBF9883FDAB1D /* Frameworks */, + 5FB13B82BAA58277FD2E156E48F4D474 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "lottie-ios-Lottie"; + productName = Lottie; + productReference = E8F840BD36B903B27E980AFC9F11A82E /* lottie-ios-Lottie */; + productType = "com.apple.product-type.bundle"; + }; + 18BD026D2210082A239FC15D072FD5BF /* Pods-keyBoard */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8ADC3FD290023F679900C87AB13312C4 /* Build configuration list for PBXNativeTarget "Pods-keyBoard" */; + buildPhases = ( + C37C55DABDCEE31755BC09435F9BBBB6 /* Headers */, + 0DE7D63CF120110AD0CEEA4BF94A7697 /* Sources */, + ED82ACB4CEF5A024DE2B25EA4F613C6A /* Frameworks */, + 92FF6A2EF7587ACFDE160F259B1BFF58 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 28D637EE2F343668BEB8C5748232CDB6 /* PBXTargetDependency */, + EF5DE56966F297E744F80BCE8EF10564 /* PBXTargetDependency */, + 1626575C7F153E0744AFF4ACD3D01B13 /* PBXTargetDependency */, + AAE6936445F844258209D979B7DC8598 /* PBXTargetDependency */, + DE38A161B58BFA3AA226D81D913D7B30 /* PBXTargetDependency */, + 4F79B9C70828C33C5C52CBECC9B2DFDF /* PBXTargetDependency */, + 72ED6991183CC5ADDBE13D2707A24D99 /* PBXTargetDependency */, + 0F5746E2D6AED40809B30C34811F8300 /* PBXTargetDependency */, + AEF74B421A5E87B1F9849D75F253E36C /* PBXTargetDependency */, + 8DFBB625E9C8D1666E557627DD945263 /* PBXTargetDependency */, ); name = "Pods-keyBoard"; productName = Pods_keyBoard; @@ -2424,7 +3008,7 @@ buildRules = ( ); dependencies = ( - EE61A46DF554B3E5C29DB10DCBB3618A /* PBXTargetDependency */, + 889F233C361E13DF4437E1F3037BF948 /* PBXTargetDependency */, ); name = SDWebImage; productName = SDWebImage; @@ -2443,7 +3027,7 @@ buildRules = ( ); dependencies = ( - 578B4FEE3B5BBEBE31FFA9C174A0B42C /* PBXTargetDependency */, + E30A57C1504C9CEDAD68F43705AEF261 /* PBXTargetDependency */, ); name = MJExtension; productName = MJExtension; @@ -2498,7 +3082,7 @@ buildRules = ( ); dependencies = ( - 5D247EA99693B7B23340BCC7FCB64DA1 /* PBXTargetDependency */, + BBCA057EFE9F2FDC7C553F0F5F2C9A00 /* PBXTargetDependency */, ); name = MJRefresh; productName = MJRefresh; @@ -2525,11 +3109,11 @@ }; 94CFBA7D633ECA58DF85C327B035E6A3 /* SDWebImage-SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = E1B78FF12090122B97AE1A33AD172B8C /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */; + buildConfigurationList = CDEF1C79C6060BF8CEDF95916DAA721B /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */; buildPhases = ( - AD25BCFFC542199E6A56D85CF9FB3D3B /* Sources */, - 68405B5F41E04D755317E63849131904 /* Frameworks */, - E40003F128ACA565E0AF6D7254C64D86 /* Resources */, + 34CC5D163747BEAD9E1B231E7730A382 /* Sources */, + 74AFAC404B3A207829AA53AB25A4BE3E /* Frameworks */, + 2FCD293D0D56717871439B7EA54E1D9C /* Resources */, ); buildRules = ( ); @@ -2542,11 +3126,11 @@ }; B26054DF1DEA11585A231AF6D1D80D5E /* MJRefresh-MJRefresh.Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 0B91AB5AF396DEF5CC076D126E4738A7 /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */; + buildConfigurationList = 3080499E39E8C7D890CA8B528ACBFBD1 /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */; buildPhases = ( - 8986B9155B9BA0DA7D02654B069F0887 /* Sources */, - 0DE7FCDD6C04EC4E1E9ECB00A0604FB7 /* Frameworks */, - 021D9F4B66A6BEEC09A45D59909CBDE6 /* Resources */, + D13A3C182B5931130DAE8C9570CFFE96 /* Sources */, + CB94216522549F91CDBE0581C641FF14 /* Frameworks */, + 7BBC71653D264EDCA7C6BF2F345A40CB /* Resources */, ); buildRules = ( ); @@ -2559,11 +3143,11 @@ }; B32AF3F43989CBA171BB1FB3957A4509 /* MJExtension-MJExtension */ = { isa = PBXNativeTarget; - buildConfigurationList = 95B0FCBEC38B41A89EDFDA2284E4CF2F /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */; + buildConfigurationList = 7F263E2ADC6F6129556B0AA5B9643C46 /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */; buildPhases = ( - D5A57C43D4D146DC812EB6C4160745DD /* Sources */, - A12778F5B92D79BB1CB466B6E7808C73 /* Frameworks */, - D4B34D2916BE13E436CD1FF18F0BC0CB /* Resources */, + 83F8BB4B443AF13F65B69B7A8E796F74 /* Sources */, + 18CA2D935E3617DC0D597DAEBF859E9C /* Frameworks */, + 042EA7863E6BA94820F18BBEB19A36D4 /* Resources */, ); buildRules = ( ); @@ -2586,11 +3170,11 @@ buildRules = ( ); dependencies = ( - 33AF3D0CC306E3DD56CCD4562DC58ABA /* PBXTargetDependency */, - 6D842140C98E51FF8C3EC4AC689EC108 /* PBXTargetDependency */, - AEC4F62BB393A387D98BB39E07E54A5E /* PBXTargetDependency */, - BD5EEFF9A8B5208454EE5C08E29DEC6F /* PBXTargetDependency */, - 32CDD4F647C6AFB9D8EF74E8A88163CD /* PBXTargetDependency */, + 7C44EA0304E00323204F385E53ECC561 /* PBXTargetDependency */, + 6452274EAD24D1924FB2BA9F949A3717 /* PBXTargetDependency */, + 8096082515C7366409E4F532F841AAC5 /* PBXTargetDependency */, + F1E659A86CEAC1C641965350BB7BE9E5 /* PBXTargetDependency */, + CEE35A597445E07F9A825BA2C4B6757D /* PBXTargetDependency */, ); name = "Pods-CustomKeyboard"; productName = Pods_CustomKeyboard; @@ -2635,7 +3219,7 @@ mainGroup = CF1408CF629C7361332E53B88F7BD30C; minimizedProjectReferenceProxies = 0; preferredProjectObjectVersion = 77; - productRefGroup = 1C8A19406FF58E9BA6BC427CA02E9857 /* Products */; + productRefGroup = ABC988430FD741F4A5BE89BAF5CAF576 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -2643,6 +3227,8 @@ 4A68CFD979D413A619DF631BB121D98F /* Bugly */, F1BCD9702276377FB5B3BDB6EAF709D7 /* DZNEmptyDataSet */, 638FEAAFC575BB76BC6AC055CDDA3506 /* LookinServer */, + 0B967D7F8561D42493EE289EC8D450D1 /* lottie-ios */, + 136FDD82F26C77E0886BF3ECAE2ADFC9 /* lottie-ios-Lottie */, 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */, 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */, 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */, @@ -2658,11 +3244,11 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 021D9F4B66A6BEEC09A45D59909CBDE6 /* Resources */ = { + 042EA7863E6BA94820F18BBEB19A36D4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BBD85F9E0E25710317253841091C391F /* PrivacyInfo.xcprivacy in Resources */, + 50608EFD4C9DF296E9D44CDA38DDD601 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2674,6 +3260,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2FCD293D0D56717871439B7EA54E1D9C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8CA5AD424A06C76F97DE092EDC148F00 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 44B3C0D7DDF289331B7732E9D87126DB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2691,6 +3285,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 5FB13B82BAA58277FD2E156E48F4D474 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D8A81E8A20713CA067A7C3F698BE25BA /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7BBC71653D264EDCA7C6BF2F345A40CB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3DF4A8FC9BFA0AB9E945872E6360F93 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8DF763B35C7183D33FE173339E261549 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2698,6 +3308,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92FF6A2EF7587ACFDE160F259B1BFF58 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9BB224D4E89ABC2539ABBEBDC9696C8F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2705,18 +3322,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B3CE18BE6ADF72F2E31CF5989ACEA7C5 /* Resources */ = { + A6CDD9C94C7E0707CDB82F94A446AB89 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D4B34D2916BE13E436CD1FF18F0BC0CB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2FEE980BEE23B8E0C7EBB70445EC8C9A /* PrivacyInfo.xcprivacy in Resources */, + 23ECC9E5E082094B64651BD82568ECFC /* lottie-ios-Lottie in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2727,14 +3337,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E40003F128ACA565E0AF6D7254C64D86 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EBC9AA5D4A55F79BB5CBF6CC92719FAF /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; E664BDFE0B44D742638A43686ACB3008 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2866,15 +3468,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 87D36E846DA0820C15C53178D809C27F /* Sources */ = { + 0DE7D63CF120110AD0CEEA4BF94A7697 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9DE398BDF0CD7F38181F2F751AC18CB2 /* Pods-keyBoard-dummy.m in Sources */, + 336ECD5741D57E20B7043F67472EAEA7 /* Pods-keyBoard-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8986B9155B9BA0DA7D02654B069F0887 /* Sources */ = { + 34CC5D163747BEAD9E1B231E7730A382 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 83F8BB4B443AF13F65B69B7A8E796F74 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -2962,10 +3571,72 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AD25BCFFC542199E6A56D85CF9FB3D3B /* Sources */ = { + C7001D67F681307D3CBDDEBFC6BCAD16 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4E43713B6AD30573D3469DFB7B66AF8D /* CALayer+Compat.m in Sources */, + 735F9D7C7E50C74D3E6E9788B1963F7B /* CGGeometry+LOTAdditions.m in Sources */, + A77E100C3A2B8B358510930A30EB0D04 /* LOTAnimatedControl.m in Sources */, + 10062AFEC80CE176CF04344AB75B89A9 /* LOTAnimatedSwitch.m in Sources */, + 6C696FA9BB84FDEC703BB4DFB66D43FF /* LOTAnimationCache.m in Sources */, + 46D0082EC03F5D8A1DFADCBE11232F5B /* LOTAnimationTransitionController.m in Sources */, + CE6655231AA31E81F892BF128A3F69C5 /* LOTAnimationView.m in Sources */, + 7D91765FE5B6F3C33BFC7A6AACB1C381 /* LOTAnimatorNode.m in Sources */, + FBBDE0C9C47BE5882C56BAC0CCD6EC2E /* LOTArrayInterpolator.m in Sources */, + 0EE1D16AA387B18C0D1CA1129FF19E31 /* LOTAsset.m in Sources */, + 79CE3BE0C79C050332690E1D010FEAF8 /* LOTAssetGroup.m in Sources */, + 8FF6AFBAC7376E30409C4CBA3C779CBD /* LOTBezierData.m in Sources */, + BF170C7F6C8C81224D7FC668C7A43A37 /* LOTBezierPath.m in Sources */, + 39E40C0B595AADBCE898BF30E529D40E /* LOTBlockCallback.m in Sources */, + C705FF253BD1A8573048C783E1632B34 /* LOTCacheProvider.m in Sources */, + F548C5CC8DF15FF0156F403FA215A402 /* LOTCircleAnimator.m in Sources */, + 3A49D2E06AA81A84476590E2B9C69080 /* LOTColorInterpolator.m in Sources */, + 3B1D9216332BB1F1C577B4EC499859AB /* LOTComposition.m in Sources */, + 244A8622B3C8A91FAC0199C4A04974EB /* LOTCompositionContainer.m in Sources */, + C42D63FF7758462B9ED5BB5A4F179ED4 /* LOTFillRenderer.m in Sources */, + FD975E47AB4881874E8582FB16450F47 /* LOTGradientFillRender.m in Sources */, + 56CD8F09CD6CD8D9BB07B643E5E9636A /* LOTInterpolatorCallback.m in Sources */, + 34726090209B31C283ECDF1A6B7B30B8 /* LOTKeyframe.m in Sources */, + 5F72720C9304C41EF36C47E72E0110D4 /* LOTKeypath.m in Sources */, + 0B039B302AC961B2EB32E02E52E53D8C /* LOTLayer.m in Sources */, + BA69BB0EFCFBEA2CFC84289980390EBE /* LOTLayerContainer.m in Sources */, + 23C5654B62A2DBD4228C4B05413ECF5A /* LOTLayerGroup.m in Sources */, + 0234D8ACED7765F06930E73AF7D6A75E /* LOTMask.m in Sources */, + BFFE7A4B4D8020CF5672C5133D1F1CD9 /* LOTMaskContainer.m in Sources */, + AA8C0F3F06FA3C69306C0EF728D62510 /* LOTNumberInterpolator.m in Sources */, + 241D8DFB272290432170855DB375F0DD /* LOTPathAnimator.m in Sources */, + 8B04467560C43914FDE87559AADB2CC3 /* LOTPathInterpolator.m in Sources */, + AF25A0AF978D4B51EF7558BBDF89CF26 /* LOTPointInterpolator.m in Sources */, + 1DB279036B5FBBDA16AD04F9CB0B79DF /* LOTPolygonAnimator.m in Sources */, + 85574CB0CE4228BAC11E880230E55E66 /* LOTPolystarAnimator.m in Sources */, + FED6FF7B8976AF055D1B958627C5B6FE /* LOTRadialGradientLayer.m in Sources */, + 914E0A2EAB27FE83F8469DD989C71C0B /* LOTRenderGroup.m in Sources */, + A0736183186A760F5659A4C79ADF0918 /* LOTRenderNode.m in Sources */, + BBACA13FFCF406ADE3AE808E582A0ACC /* LOTRepeaterRenderer.m in Sources */, + 96D85EB10EEE95570327E9EDE152A893 /* LOTRoundedRectAnimator.m in Sources */, + 9ED40BA9177917BE85A7EA4980113B11 /* LOTShapeCircle.m in Sources */, + 902A0341EFA3C8257D7E0635AA7FF100 /* LOTShapeFill.m in Sources */, + 53F2005EEE15D5075DD26210B938F80B /* LOTShapeGradientFill.m in Sources */, + CA0D281C34C14862007C11E25C5B9A5F /* LOTShapeGroup.m in Sources */, + 3D0F7B02FB0D33BBCF8F8E825D16B8C6 /* LOTShapePath.m in Sources */, + A0B721931C444BA78A87972BD5684E6D /* LOTShapeRectangle.m in Sources */, + 76A2AD3B74670276694332C4D99B7F4F /* LOTShapeRepeater.m in Sources */, + 816784C7466CB9CB43591F199E50B8CD /* LOTShapeStar.m in Sources */, + 18CA52FD8966E21A2EB03FDD052AB509 /* LOTShapeStroke.m in Sources */, + B3C72C3F5B34B02356C3335F050BD586 /* LOTShapeTransform.m in Sources */, + B173B81A09F5DDB5C6B744CC77ACB97D /* LOTShapeTrimPath.m in Sources */, + 1D8F5ECDFB5353E3AB5BECC0E1236B80 /* LOTSizeInterpolator.m in Sources */, + 5F57FF4BFC63C283B433EDAC4BA09B48 /* LOTStrokeRenderer.m in Sources */, + 536AD94A96C3B81AD07404CF4D23D493 /* lottie-ios-dummy.m in Sources */, + 3610588F6D25070B9DBF77DE4C43C672 /* LOTTransformInterpolator.m in Sources */, + C7ADD8EB5C9D708ECEA2C390240A16D8 /* LOTTrimPathNode.m in Sources */, + 7E36C96F45A0BC0F7AACA6CC5E25630B /* LOTValueCallback.m in Sources */, + 05C70E42B050AD839F22D728CE18B9CA /* LOTValueInterpolator.m in Sources */, + C9B39B6EEDBA0B2AE31F33FC2C06CE46 /* NSValue+Compat.m in Sources */, + 9563A0AA5DDDD9A563C72011405514F7 /* UIBezierPath.m in Sources */, + E83D81700EFA8F27D5B883B412CBEB4B /* UIColor.m in Sources */, + 14850B40C2FC9803BF1B3D83BEBD1E49 /* UIColor+Expanded.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2992,7 +3663,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D5A57C43D4D146DC812EB6C4160745DD /* Sources */ = { + D13A3C182B5931130DAE8C9570CFFE96 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -3049,6 +3720,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E3122A10040C9A9869F8077BEC1D112F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; E8CCE3C7763C30E81A067AE9AC1B8915 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3060,114 +3738,126 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 071F326A1012E3F537E82D4600D6099B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bugly; - target = 4A68CFD979D413A619DF631BB121D98F /* Bugly */; - targetProxy = C85024A705A5032AA3907BF36C187CEA /* PBXContainerItemProxy */; - }; - 09B11A1954CF8173776EC7F7B6571224 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = F295793354A8BF65125212DAE1C81DF5 /* PBXContainerItemProxy */; - }; - 32CDD4F647C6AFB9D8EF74E8A88163CD /* PBXTargetDependency */ = { + 0F5746E2D6AED40809B30C34811F8300 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Masonry; target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = 551922F754B651AFCAAB56605458A1A4 /* PBXContainerItemProxy */; + targetProxy = AAB9841D6B0644068394C00CB2265530 /* PBXContainerItemProxy */; }; - 33AF3D0CC306E3DD56CCD4562DC58ABA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AFNetworking; - target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; - targetProxy = F34B1D580EA71604D4CC7C4C5807E366 /* PBXContainerItemProxy */; - }; - 3CC71AA09CD8D91F7CAC51C8C0C3D8A8 /* PBXTargetDependency */ = { + 1626575C7F153E0744AFF4ACD3D01B13 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DZNEmptyDataSet; target = F1BCD9702276377FB5B3BDB6EAF709D7 /* DZNEmptyDataSet */; - targetProxy = D8B3BBDA3C526A079F33D20BFE81FDA0 /* PBXContainerItemProxy */; + targetProxy = 523F84A7E8BDE089117809BBE36C02AE /* PBXContainerItemProxy */; }; - 4CEDC3503EBC64FA8AD4BB751A1257E2 /* PBXTargetDependency */ = { + 28D637EE2F343668BEB8C5748232CDB6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; + targetProxy = D66CD0A7C341B08C9A4D1DE4055855B3 /* PBXContainerItemProxy */; + }; + 4F79B9C70828C33C5C52CBECC9B2DFDF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MJExtension; + target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; + targetProxy = FE33D826CCD0D75C3822DD9FB2EEBCE0 /* PBXContainerItemProxy */; + }; + 6452274EAD24D1924FB2BA9F949A3717 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DZNEmptyDataSet; + target = F1BCD9702276377FB5B3BDB6EAF709D7 /* DZNEmptyDataSet */; + targetProxy = C7749D52C280676AB7E0DC7782B74CBD /* PBXContainerItemProxy */; + }; + 72ED6991183CC5ADDBE13D2707A24D99 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = MJRefresh; target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; - targetProxy = 6610EBAD645971628D6E656F2A7FB551 /* PBXContainerItemProxy */; + targetProxy = 99624177089035CF7C18F78DCA46954D /* PBXContainerItemProxy */; }; - 575EFC27A8B3BE6F6EF85229FA04A8F6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MBProgressHUD; - target = 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */; - targetProxy = F9524D7CD6D352CCF289944EBCA3B3FB /* PBXContainerItemProxy */; - }; - 578B4FEE3B5BBEBE31FFA9C174A0B42C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MJExtension-MJExtension"; - target = B32AF3F43989CBA171BB1FB3957A4509 /* MJExtension-MJExtension */; - targetProxy = F4000FEC7CADA56B75E5CC31E64EC891 /* PBXContainerItemProxy */; - }; - 5D247EA99693B7B23340BCC7FCB64DA1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MJRefresh-MJRefresh.Privacy"; - target = B26054DF1DEA11585A231AF6D1D80D5E /* MJRefresh-MJRefresh.Privacy */; - targetProxy = BBBA8C59A31486B3AE2F16C6A4AAAB66 /* PBXContainerItemProxy */; - }; - 69F880D20E49FF278D9D99F0FC359C80 /* PBXTargetDependency */ = { + 7C44EA0304E00323204F385E53ECC561 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AFNetworking; target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; - targetProxy = 17AC289E8A24B84DB147B7977008DB53 /* PBXContainerItemProxy */; + targetProxy = 65E2ABBE344510E7F51814545840D00C /* PBXContainerItemProxy */; }; - 6D842140C98E51FF8C3EC4AC689EC108 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DZNEmptyDataSet; - target = F1BCD9702276377FB5B3BDB6EAF709D7 /* DZNEmptyDataSet */; - targetProxy = B0F47C29852712CF2F2C1E658ECD1809 /* PBXContainerItemProxy */; - }; - 8343E87E690EAE8ED5D426D9B97081C7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MJExtension; - target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; - targetProxy = 17A6BBBD906DDCB7334A02B16B07B4DB /* PBXContainerItemProxy */; - }; - AEC4F62BB393A387D98BB39E07E54A5E /* PBXTargetDependency */ = { + 8096082515C7366409E4F532F841AAC5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = MBProgressHUD; target = 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */; - targetProxy = A311284721E0C3165FAA791C3EE6961E /* PBXContainerItemProxy */; + targetProxy = 687911F6B6BB070C2225167D056638F7 /* PBXContainerItemProxy */; }; - BD5EEFF9A8B5208454EE5C08E29DEC6F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MJExtension; - target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; - targetProxy = AD74DB90134D3DB33FAC2C873C0764E9 /* PBXContainerItemProxy */; - }; - D4796534CC93D6F34DDBB3E449125A23 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = LookinServer; - target = 638FEAAFC575BB76BC6AC055CDDA3506 /* LookinServer */; - targetProxy = 7D22DC5F48A287865357EE41131C6668 /* PBXContainerItemProxy */; - }; - EE61A46DF554B3E5C29DB10DCBB3618A /* PBXTargetDependency */ = { + 889F233C361E13DF4437E1F3037BF948 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "SDWebImage-SDWebImage"; target = 94CFBA7D633ECA58DF85C327B035E6A3 /* SDWebImage-SDWebImage */; - targetProxy = 8C2E663FC9840B2B7BABEF079AD58862 /* PBXContainerItemProxy */; + targetProxy = 97A15C213F33B1D119B61F6A45EAEF4E /* PBXContainerItemProxy */; }; - EF01B3D5C4798C26DB6A90866EE03225 /* PBXTargetDependency */ = { + 8DFBB625E9C8D1666E557627DD945263 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "lottie-ios"; + target = 0B967D7F8561D42493EE289EC8D450D1 /* lottie-ios */; + targetProxy = AEB3C734FCFD8DC82E64778F1DBF3236 /* PBXContainerItemProxy */; + }; + AAE6936445F844258209D979B7DC8598 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = LookinServer; + target = 638FEAAFC575BB76BC6AC055CDDA3506 /* LookinServer */; + targetProxy = DFCFD249D65F76523788B07416599903 /* PBXContainerItemProxy */; + }; + AEF74B421A5E87B1F9849D75F253E36C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 98811BF28BBE44E4EC5DE002C8E480A6 /* PBXContainerItemProxy */; + }; + BBCA057EFE9F2FDC7C553F0F5F2C9A00 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MJRefresh-MJRefresh.Privacy"; + target = B26054DF1DEA11585A231AF6D1D80D5E /* MJRefresh-MJRefresh.Privacy */; + targetProxy = E72DD65F300460D9DE59CE34AE3C56D9 /* PBXContainerItemProxy */; + }; + CEE35A597445E07F9A825BA2C4B6757D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Masonry; target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = 1CC061C6A0CA52E13056E44543CDE4BD /* PBXContainerItemProxy */; + targetProxy = F88D2E05098ACA813D9B4037428FEF1F /* PBXContainerItemProxy */; + }; + DE38A161B58BFA3AA226D81D913D7B30 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MBProgressHUD; + target = 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */; + targetProxy = D0AD631EE2F52B5410362CD80521FFE4 /* PBXContainerItemProxy */; + }; + E30A57C1504C9CEDAD68F43705AEF261 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MJExtension-MJExtension"; + target = B32AF3F43989CBA171BB1FB3957A4509 /* MJExtension-MJExtension */; + targetProxy = 05E37D87694B2835067E947D2A500B57 /* PBXContainerItemProxy */; + }; + EF5DE56966F297E744F80BCE8EF10564 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Bugly; + target = 4A68CFD979D413A619DF631BB121D98F /* Bugly */; + targetProxy = 68E269B496C8198FE971D3BCCB68A317 /* PBXContainerItemProxy */; + }; + F1E659A86CEAC1C641965350BB7BE9E5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MJExtension; + target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; + targetProxy = C465864A640933164C0AE9D72B0C09D0 /* PBXContainerItemProxy */; + }; + FBC0FC3F8AD85320F7AC2235FCEAE5F1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "lottie-ios-Lottie"; + target = 136FDD82F26C77E0886BF3ECAE2ADFC9 /* lottie-ios-Lottie */; + targetProxy = 0ABCD8F19156F595E97A263B13CE6088 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 1A69165A21A7A1CC42A38CF8ADE98215 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2DAD93B79D27664FE05E862A2C992A45 /* LookinServer.release.xcconfig */; + baseConfigurationReference = 521A6910A73CED7674A8C2BDACCC5DDE /* LookinServer.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3202,6 +3892,23 @@ }; name = Release; }; + 1C7496CBE436DE38FE5DBBEDE56B7829 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DC6DC213043BFCD5FF2737B128B095F8 /* 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 = 9.0; + PRODUCT_NAME = SDWebImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; 227E6E64001CE57ED070BAB9C31DCAEC /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1D774D8146EBC82B4A77204A273761B8 /* Pods-CustomKeyboard.release.xcconfig */; @@ -3242,9 +3949,48 @@ }; name = Release; }; + 2B79FF9B04736360BF03827C44DDC508 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 35BFA337F4E1FDE67C773A82CCDFD6DA /* Pods-keyBoard.debug.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-keyBoard/Pods-keyBoard-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-keyBoard/Pods-keyBoard.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"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 2D1085CA7BD144CABF012FC10C6C9120 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B9AC91A4E70DD8F8592A5811E8617578 /* Masonry.debug.xcconfig */; + baseConfigurationReference = 608C730FF1F26EE575475575DA2FE17B /* Masonry.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3281,7 +4027,7 @@ }; 35044A57510DB3F4E442A9C16E980E4A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 61A50E7751555885AEB4247687F5DF05 /* DZNEmptyDataSet.debug.xcconfig */; + baseConfigurationReference = 536C6C1311D021BE4B3D2FFC4FCAAB4D /* DZNEmptyDataSet.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3316,26 +4062,9 @@ }; name = Debug; }; - 427CF48FABE82C6FC8208160FDF4A9CE /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 57BCCC946B3042A20D0C8F15D69FF943 /* MJExtension.debug.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 = 12.0; - PRODUCT_NAME = MJExtension; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 49CEA33268972C89BF290FCBF8F9DFC0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52832E51BDED300B58102A301664AD5A /* DZNEmptyDataSet.release.xcconfig */; + baseConfigurationReference = 5B6EA05154753DC4D375BA1713B9003A /* DZNEmptyDataSet.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3371,16 +4100,16 @@ }; name = Release; }; - 50BA0438712A00B9F9ECCE17AD68D287 /* Debug */ = { + 5108867C406AED693E096C0432E2FC82 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5998234B9DD3C83BCD1DE88EDDEA5DF6 /* SDWebImage.debug.xcconfig */; + baseConfigurationReference = 60473D1A1552535AACA2C9886A6471BA /* MJExtension.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 = 9.0; - PRODUCT_NAME = SDWebImage; + 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 = 12.0; + PRODUCT_NAME = MJExtension; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -3390,7 +4119,7 @@ }; 51753BD6FE635BB9421BCA4C05F63C6A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 45EDC4788D38048F75B7F3CD0BEF1783 /* MJRefresh.release.xcconfig */; + baseConfigurationReference = 80BE1C77426CD4B7145AC8F9C385B53C /* MJRefresh.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3427,26 +4156,9 @@ }; name = Release; }; - 532B03D3A70665C5D6CA2E785045C97B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E2A55F2F78E11DEDCF2FA119B3E1912 /* 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 = 12.0; - PRODUCT_NAME = MJExtension; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 614F7847ADAD2F1EEC9E48FAEC955108 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D2BBA8DCCC9E2658211368C22BE1B033 /* MJRefresh.debug.xcconfig */; + baseConfigurationReference = CD4FC6550E96D509C66913F5CC2EA900 /* MJRefresh.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3484,7 +4196,7 @@ }; 618AB008538F74AAF983C04297207BB6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9641B4F4D8DDE2072CB32BF4C9C2882A /* LookinServer.debug.xcconfig */; + baseConfigurationReference = ED49C9E461A9AD6242E9D6C45B28C8F6 /* LookinServer.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3518,6 +4230,80 @@ }; name = Debug; }; + 62A7252890610CC934D8C40A2E8087A0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 67B707C443F1C733E296074798607AC1 /* SDWebImage.release.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 = 9.0; + PRODUCT_NAME = SDWebImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 6A46DFAFF6BE2FA5DA18BF4119F269A5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A6E8FF241173D596A21D4D4B7D86A810 /* Pods-keyBoard.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-keyBoard/Pods-keyBoard-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-keyBoard/Pods-keyBoard.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; + }; + 7ABC30F52CA02010F603BC16E5C21A6C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 46586766A6BF3CF60E90BEA5447A15C1 /* 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-Lottie-lottie-ios-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = Lottie; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 7BB5AE2225500DE9658B6277FED45BCD /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 0D6215D1BCCE125B8DF73E38013CBBDC /* Pods-CustomKeyboard.debug.xcconfig */; @@ -3623,22 +4409,22 @@ }; name = Debug; }; - 9C1EE0C94CDE25779693BCA7261B5989 /* Release */ = { + 955A07F189420055E0C087657601CDBC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C31E11F6B40D55EB650013FAC1B59C0 /* SDWebImage.release.xcconfig */; + baseConfigurationReference = ACEF80D231F2CFD0C04D85BF44B25260 /* lottie-ios.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 = 9.0; - PRODUCT_NAME = SDWebImage; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/lottie-ios"; + IBSC_MODULE = Lottie; + INFOPLIST_FILE = "Target Support Files/lottie-ios/ResourceBundle-Lottie-lottie-ios-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = Lottie; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { isa = XCBuildConfiguration; @@ -3704,7 +4490,7 @@ }; 9E9FB1E032B56896F9380263D45A0F9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3E2A55F2F78E11DEDCF2FA119B3E1912 /* MJExtension.release.xcconfig */; + baseConfigurationReference = C4BB3D2F4DC3D69137636E57BEF94DBE /* MJExtension.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3743,7 +4529,7 @@ }; 9F519E5162C0E51D10B7E999E2FD0125 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C31E11F6B40D55EB650013FAC1B59C0 /* SDWebImage.release.xcconfig */; + baseConfigurationReference = 67B707C443F1C733E296074798607AC1 /* SDWebImage.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3781,7 +4567,7 @@ }; B04295D726C1883ADA40A304483D7E33 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5998234B9DD3C83BCD1DE88EDDEA5DF6 /* SDWebImage.debug.xcconfig */; + baseConfigurationReference = DC6DC213043BFCD5FF2737B128B095F8 /* SDWebImage.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3818,7 +4604,7 @@ }; B26FBB655ABB114E4C0D589843814D6C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8C9727D0D56A9017D437CA50176F0474 /* Bugly.release.xcconfig */; + baseConfigurationReference = CCD9AF9E05C07333A3773AF6DA3CF95D /* Bugly.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -3834,9 +4620,9 @@ }; name = Release; }; - B83818605FEB0030D2B6D7FF64325A19 /* Debug */ = { + B2CA1DB16D09D270B4502C13F1A5C2BB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D2BBA8DCCC9E2658211368C22BE1B033 /* MJRefresh.debug.xcconfig */; + baseConfigurationReference = CD4FC6550E96D509C66913F5CC2EA900 /* MJRefresh.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJRefresh"; @@ -3851,49 +4637,9 @@ }; name = Debug; }; - BA12DA04ADC510F02AC04E3CFF37D769 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A6E8FF241173D596A21D4D4B7D86A810 /* Pods-keyBoard.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-keyBoard/Pods-keyBoard-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-keyBoard/Pods-keyBoard.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; - }; BCD70A0BB22D0C72BAF7207A7D4F44BD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2940A878AE956B2190BA5A68D63DC5AD /* MBProgressHUD.debug.xcconfig */; + baseConfigurationReference = 5AF7FC3B980CED875CC7772265BF1250 /* MBProgressHUD.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3930,7 +4676,7 @@ }; BE0CDEB7BE0A402663AFCC2111742430 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71C7BAB63ED44B881A65C001AA682ADB /* MBProgressHUD.release.xcconfig */; + baseConfigurationReference = 5B950349F3C1E7FD511BC7E648DEFA23 /* MBProgressHUD.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3968,7 +4714,7 @@ }; CBAFED52B4B51F600FAF2141BA449F2E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 18DB01964CBE026F2E6511875E1A98E2 /* Bugly.debug.xcconfig */; + baseConfigurationReference = C762D70B7920FDB0727888032829A113 /* Bugly.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -3983,48 +4729,9 @@ }; name = Debug; }; - CCA3AD40EAA35CF032C0E1F404CCF9A1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 35BFA337F4E1FDE67C773A82CCDFD6DA /* Pods-keyBoard.debug.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-keyBoard/Pods-keyBoard-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-keyBoard/Pods-keyBoard.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"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; CEE7FEC0A1B23DE7053203A448EEB294 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5104591E28208BB976FFAD3D7AFA2F58 /* AFNetworking.debug.xcconfig */; + baseConfigurationReference = 2353F897342612360614276D7D592737 /* AFNetworking.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4061,7 +4768,7 @@ }; D0AB0AEF4014B926FCD853D3AE0A370A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F53F6F5B0D7E0FF60505964233E5C608 /* Masonry.release.xcconfig */; + baseConfigurationReference = 478F7530AAFF5BC9E06831B50C9CCF6C /* Masonry.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4097,9 +4804,43 @@ }; name = Release; }; + D52C61A174408657752902EE731B7705 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C4BB3D2F4DC3D69137636E57BEF94DBE /* 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 = 12.0; + PRODUCT_NAME = MJExtension; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + D6BB09E5597D370430B022A8AD902630 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 80BE1C77426CD4B7145AC8F9C385B53C /* MJRefresh.release.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 = 12.0; + PRODUCT_NAME = MJRefresh.Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; DA533AA9B577872DAFB44EF2CF26C49A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C6F66997EF28E05B21EB7F13B379645A /* AFNetworking.release.xcconfig */; + baseConfigurationReference = BC10FCFD9ACA73AAA42A4C6AA4707349 /* AFNetworking.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4137,7 +4878,7 @@ }; EC66105EE15F9DC9B6F20F58FB67957D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57BCCC946B3042A20D0C8F15D69FF943 /* MJExtension.debug.xcconfig */; + baseConfigurationReference = 60473D1A1552535AACA2C9886A6471BA /* MJExtension.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -4173,35 +4914,84 @@ }; name = Debug; }; - FE5AD58E2A362D4BD062D63BEF049BC0 /* Release */ = { + EE152F38873EEF6664FFBAF5CB6ED5F2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 45EDC4788D38048F75B7F3CD0BEF1783 /* MJRefresh.release.xcconfig */; + baseConfigurationReference = 46586766A6BF3CF60E90BEA5447A15C1 /* lottie-ios.release.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 = 12.0; - PRODUCT_NAME = MJRefresh.Privacy; + "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/lottie-ios/lottie-ios-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/lottie-ios/lottie-ios-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/lottie-ios/lottie-ios.modulemap"; + PRODUCT_MODULE_NAME = Lottie; + PRODUCT_NAME = Lottie; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; + F24F803FEAF7A1638A719D45D4569435 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ACEF80D231F2CFD0C04D85BF44B25260 /* lottie-ios.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/lottie-ios/lottie-ios-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/lottie-ios/lottie-ios-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/lottie-ios/lottie-ios.modulemap"; + PRODUCT_MODULE_NAME = Lottie; + PRODUCT_NAME = Lottie; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0B91AB5AF396DEF5CC076D126E4738A7 /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B83818605FEB0030D2B6D7FF64325A19 /* Debug */, - FE5AD58E2A362D4BD062D63BEF049BC0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 1CF7CA11A791652D6975B2EDE2FC6719 /* Build configuration list for PBXNativeTarget "DZNEmptyDataSet" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4229,11 +5019,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3FA2BE14A4014E20D1803ECC0CEB5A7F /* Build configuration list for PBXNativeTarget "Pods-keyBoard" */ = { + 3080499E39E8C7D890CA8B528ACBFBD1 /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - CCA3AD40EAA35CF032C0E1F404CCF9A1 /* Debug */, - BA12DA04ADC510F02AC04E3CFF37D769 /* Release */, + B2CA1DB16D09D270B4502C13F1A5C2BB /* Debug */, + D6BB09E5597D370430B022A8AD902630 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 41C8EE468668D6C2079F555F26806DC4 /* Build configuration list for PBXNativeTarget "lottie-ios-Lottie" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 955A07F189420055E0C087657601CDBC /* Debug */, + 7ABC30F52CA02010F603BC16E5C21A6C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -4265,6 +5064,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 7F263E2ADC6F6129556B0AA5B9643C46 /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5108867C406AED693E096C0432E2FC82 /* Debug */, + D52C61A174408657752902EE731B7705 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8ADC3FD290023F679900C87AB13312C4 /* Build configuration list for PBXNativeTarget "Pods-keyBoard" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2B79FF9B04736360BF03827C44DDC508 /* Debug */, + 6A46DFAFF6BE2FA5DA18BF4119F269A5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 945C0F2B41CBADE68A142120AE9A4AF3 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4274,15 +5091,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 95B0FCBEC38B41A89EDFDA2284E4CF2F /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 427CF48FABE82C6FC8208160FDF4A9CE /* Debug */, - 532B03D3A70665C5D6CA2E785045C97B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 9CC7AA793D9397C15E010F8242EE1046 /* Build configuration list for PBXAggregateTarget "Bugly" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4292,6 +5100,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A5E591F0C1A7CDA8EC0F6E54E0BD26D2 /* Build configuration list for PBXNativeTarget "lottie-ios" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F24F803FEAF7A1638A719D45D4569435 /* Debug */, + EE152F38873EEF6664FFBAF5CB6ED5F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AAA1F8799DB68036C3BE983C05FAA2C7 /* Build configuration list for PBXNativeTarget "Masonry" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4310,11 +5127,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E1B78FF12090122B97AE1A33AD172B8C /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */ = { + CDEF1C79C6060BF8CEDF95916DAA721B /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 50BA0438712A00B9F9ECCE17AD68D287 /* Debug */, - 9C1EE0C94CDE25779693BCA7261B5989 /* Release */, + 1C7496CBE436DE38FE5DBBEDE56B7829 /* Debug */, + 62A7252890610CC934D8C40A2E8087A0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Pods.xcodeproj/xcuserdata/mac.xcuserdatad/xcschemes/lottie-ios-Lottie.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/mac.xcuserdatad/xcschemes/lottie-ios-Lottie.xcscheme new file mode 100644 index 0000000..b339ca1 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/mac.xcuserdatad/xcschemes/lottie-ios-Lottie.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/mac.xcuserdatad/xcschemes/lottie-ios.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/mac.xcuserdatad/xcschemes/lottie-ios.xcscheme new file mode 100644 index 0000000..1d42aba --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/mac.xcuserdatad/xcschemes/lottie-ios.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.markdown b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.markdown index d4f13b3..5e16c36 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.markdown @@ -175,6 +175,211 @@ THE SOFTWARE. +## lottie-ios + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Airbnb, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + ## Bugly Copyright (C) 2017 Tencent Bugly, Inc. All rights reserved. diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.plist b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.plist index 009ba4e..64882c3 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-acknowledgements.plist @@ -234,6 +234,217 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Airbnb, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + Apache + Title + lottie-ios + Type + PSGroupSpecifier + FooterText Copyright (C) 2017 Tencent Bugly, Inc. All rights reserved. diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-input-files.xcfilelist index fd18c4b..6c9193e 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-input-files.xcfilelist @@ -6,4 +6,5 @@ ${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework ${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework -${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework \ No newline at end of file +${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework +${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-output-files.xcfilelist index 9d28c83..c2282fc 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Debug-output-files.xcfilelist @@ -5,4 +5,5 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework \ No newline at end of file +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-input-files.xcfilelist index 1b381a7..9c894fb 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-input-files.xcfilelist @@ -5,4 +5,5 @@ ${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework ${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework -${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework \ No newline at end of file +${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework +${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-output-files.xcfilelist index 80f5e3c..e809129 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks-Release-output-files.xcfilelist @@ -4,4 +4,5 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework \ No newline at end of file +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks.sh b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks.sh index 39e15c2..3729752 100755 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks.sh +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard-frameworks.sh @@ -184,6 +184,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework" install_framework "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" + install_framework "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" @@ -193,6 +194,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework" install_framework "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" + install_framework "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.debug.xcconfig b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.debug.xcconfig index cb9a079..66168aa 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.debug.xcconfig +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.debug.xcconfig @@ -1,10 +1,10 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer/LookinServer.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}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer/LookinServer.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}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "CoreGraphics" -framework "DZNEmptyDataSet" -framework "Foundation" -framework "ImageIO" -framework "LookinServer" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "Masonry" -framework "QuartzCore" -framework "SDWebImage" -framework "UIKit" -OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "-F${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "-F${PODS_CONFIGURATION_BUILD_DIR}/LookinServer" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" +OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "CoreGraphics" -framework "DZNEmptyDataSet" -framework "Foundation" -framework "ImageIO" -framework "LookinServer" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "Masonry" -framework "QuartzCore" -framework "SDWebImage" -framework "UIKit" +OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "-F${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "-F${PODS_CONFIGURATION_BUILD_DIR}/LookinServer" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.release.xcconfig b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.release.xcconfig index 8547576..104a891 100644 --- a/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.release.xcconfig +++ b/Pods/Target Support Files/Pods-keyBoard/Pods-keyBoard.release.xcconfig @@ -1,10 +1,10 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_ROOT}/Bugly" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/Bugly" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.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}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.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}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "AFNetworking" -framework "Bugly" -framework "CoreGraphics" -framework "DZNEmptyDataSet" -framework "Foundation" -framework "ImageIO" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "Masonry" -framework "QuartzCore" -framework "SDWebImage" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "-F${PODS_CONFIGURATION_BUILD_DIR}/Bugly" "-F${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "AFNetworking" -framework "Bugly" -framework "CoreGraphics" -framework "DZNEmptyDataSet" -framework "Foundation" -framework "ImageIO" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "Masonry" -framework "QuartzCore" -framework "SDWebImage" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "-F${PODS_CONFIGURATION_BUILD_DIR}/Bugly" "-F${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/lottie-ios/ResourceBundle-Lottie-lottie-ios-Info.plist b/Pods/Target Support Files/lottie-ios/ResourceBundle-Lottie-lottie-ios-Info.plist new file mode 100644 index 0000000..e36bc35 --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/ResourceBundle-Lottie-lottie-ios-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + ${PODS_DEVELOPMENT_LANGUAGE} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 2.5.3 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/lottie-ios/lottie-ios-Info.plist b/Pods/Target Support Files/lottie-ios/lottie-ios-Info.plist new file mode 100644 index 0000000..45f62bc --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/lottie-ios-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.5.3 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/lottie-ios/lottie-ios-dummy.m b/Pods/Target Support Files/lottie-ios/lottie-ios-dummy.m new file mode 100644 index 0000000..67e66c9 --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/lottie-ios-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_lottie_ios : NSObject +@end +@implementation PodsDummy_lottie_ios +@end diff --git a/Pods/Target Support Files/lottie-ios/lottie-ios-prefix.pch b/Pods/Target Support Files/lottie-ios/lottie-ios-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/lottie-ios-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/lottie-ios/lottie-ios-umbrella.h b/Pods/Target Support Files/lottie-ios/lottie-ios-umbrella.h new file mode 100644 index 0000000..79e56a0 --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/lottie-ios-umbrella.h @@ -0,0 +1,30 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "LOTAnimatedControl.h" +#import "LOTAnimatedSwitch.h" +#import "LOTAnimationCache.h" +#import "LOTAnimationTransitionController.h" +#import "LOTAnimationView.h" +#import "LOTAnimationView_Compat.h" +#import "LOTBlockCallback.h" +#import "LOTCacheProvider.h" +#import "LOTComposition.h" +#import "LOTInterpolatorCallback.h" +#import "LOTKeypath.h" +#import "Lottie.h" +#import "LOTValueCallback.h" +#import "LOTValueDelegate.h" + +FOUNDATION_EXPORT double LottieVersionNumber; +FOUNDATION_EXPORT const unsigned char LottieVersionString[]; + diff --git a/Pods/Target Support Files/lottie-ios/lottie-ios.debug.xcconfig b/Pods/Target Support Files/lottie-ios/lottie-ios.debug.xcconfig new file mode 100644 index 0000000..1885f8e --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/lottie-ios.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "UIKit" +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}/lottie-ios +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/lottie-ios/lottie-ios.modulemap b/Pods/Target Support Files/lottie-ios/lottie-ios.modulemap new file mode 100644 index 0000000..494806f --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/lottie-ios.modulemap @@ -0,0 +1,6 @@ +framework module Lottie { + umbrella header "lottie-ios-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/lottie-ios/lottie-ios.release.xcconfig b/Pods/Target Support Files/lottie-ios/lottie-ios.release.xcconfig new file mode 100644 index 0000000..1885f8e --- /dev/null +++ b/Pods/Target Support Files/lottie-ios/lottie-ios.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "UIKit" +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}/lottie-ios +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/lottie-ios/LICENSE b/Pods/lottie-ios/LICENSE new file mode 100644 index 0000000..13f1254 --- /dev/null +++ b/Pods/lottie-ios/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Airbnb, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/lottie-ios/Lottie/PrivacyInfo.xcprivacy b/Pods/lottie-ios/Lottie/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..e08a130 --- /dev/null +++ b/Pods/lottie-ios/Lottie/PrivacyInfo.xcprivacy @@ -0,0 +1,14 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + NSPrivacyCollectedDataTypes + + NSPrivacyAccessedAPITypes + + + diff --git a/Pods/lottie-ios/README.md b/Pods/lottie-ios/README.md new file mode 100644 index 0000000..8cb96de --- /dev/null +++ b/Pods/lottie-ios/README.md @@ -0,0 +1,631 @@ +# Lottie for iOS, macOS (and [Android](https://github.com/airbnb/lottie-android) and [React Native](https://github.com/airbnb/lottie-react-native)) + +### Table of Contents +- [Introduction](#introduction) +- [Installing Lottie](#installing-lottie) +- [iOS Sample App](#ios-sample-app) +- [macOS Sample App](#macos-sample-app) +- [Objective C Examples](#objective-c-examples) +- [Swift Examples](#swift-examples) +- [Debugging Lottie](#debugging) +- [iOS View Controller Transitioning](#ios-view-controller-transitioning) +- [Changing Animations At Runtime](#changing-animations-at-runtime) +- [Animated Controls and Switches](#animated-controls-and-switches) +- [Adding Subviews to Animation](#adding-views-to-an-animation-at-runtime) +- [Supported After Effects Features](#supported-after-effects-features) +- [Currently Unsupported After Effects Features](#currently-unsupported-after-effects-features) +- [Community Contributions](#community-contributions) +- [Alternatives](#alternatives) +- [Why is it called Lottie?](#why-is-it-called-lottie) +- [Contributing](#contributing) +- [Issues or feature requests?](#issues-or-feature-requests) + + +## Introduction + +Lottie is a mobile library for Android and iOS that parses [Adobe After Effects](http://www.adobe.com/products/aftereffects.html) animations exported as json with [bodymovin](https://github.com/bodymovin/bodymovin) and renders the vector animations natively on mobile and through React Native! + +For the first time, designers can create **and ship** beautiful animations without an engineer painstakingly recreating it by hand. +Since the animation is backed by JSON they are extremely small in size but can be large in complexity! +Animations can be played, resized, looped, sped up, slowed down, reversed, and even interactively scrubbed. +Lottie can play or loop just a portion of the animation as well, the possibilities are endless! +Animations can even be ***changed at runtime*** in various ways! Change the color, position or any keyframable value! +Lottie also supports native UIViewController Transitions out of the box! + +Here is just a small sampling of the power of Lottie + +![Example1](_Gifs/Examples1.gif) +![Example2](_Gifs/Examples2.gif) + + + +![Example3](_Gifs/Examples3.gif) + +![Abcs](_Gifs/Examples4.gif) + +## Installing Lottie + +### Github Repo +You can pull the [Lottie Github Repo](https://github.com/airbnb/lottie-ios/) and include the Lottie.xcodeproj to build a dynamic or static library. + +### Cocoapods +Get [Cocoapods](https://cocoapods.org/) +Add the pod to your podfile +``` +pod 'lottie-ios' +``` +run +``` +pod install +``` + +After installing the cocoapod into your project import Lottie with +Objective C +`#import ` +Swift +`import Lottie` + +### Carthage +Get [Carthage](https://github.com/Carthage/Carthage) + +Add Lottie to your Cartfile +``` +github "airbnb/lottie-ios" "master" +``` +run +``` +carthage update +``` + +In your application targets “General” tab under the “Linked Frameworks and Libraries” section, drag and drop lottie-ios.framework from the Carthage/Build/iOS directory that `carthage update` produced. + +## iOS Sample App + +Clone this repo and try out [the Sample App](https://github.com/airbnb/lottie-ios/tree/master/Example) +The repo can build a macOS Example and an iOS Example + +The iOS Example App demos several of the features of Lottie + +![Example 1](_Gifs/iosexample1.png)![Example 2](_Gifs/iosexample2.png) +![Example 3](_Gifs/iosexample3.png) + +The animation Explorer allows you to scrub, play, loop, and resize animations. +Animations can be loaded from the app bundle or from [Lottie Files](http://www.lottiefiles.com) using the built in QR Code reader. + +## macOS Sample App + +Clone this repo and try out [the Sample App](https://github.com/airbnb/lottie-ios/tree/master/Example) +The repo can build a macOS Example and an iOS Example + +![Lottie Viewer](_Gifs/macexample.png) + +The Lottie Viewer for macOS allows you to drag and drop JSON files to open, play, scrub and loop animations. This app is backed by the same animation code as the iOS app, so you will get an accurate representation of Mac and iOS animations. + + +## Objective C Examples + + +Lottie animations can be loaded from bundled JSON or from a URL +To bundle JSON just add it and any images that the animation requires to your target in xcode. + +```objective-c +LOTAnimationView *animation = [LOTAnimationView animationNamed:@"Lottie"]; +[self.view addSubview:animation]; +[animation playWithCompletion:^(BOOL animationFinished) { + // Do Something +}]; +``` + +If you are working with multiple bundles you can use. + +```objective-c +LOTAnimationView *animation = [LOTAnimationView animationNamed:@"Lottie" inBundle:[NSBundle YOUR_BUNDLE]]; +[self.view addSubview:animation]; +[animation playWithCompletion:^(BOOL animationFinished) { + // Do Something +}]; +``` + +Or you can load it programmatically from a NSURL +```objective-c +LOTAnimationView *animation = [[LOTAnimationView alloc] initWithContentsOfURL:[NSURL URLWithString:URL]]; +[self.view addSubview:animation]; +``` + +Lottie supports the iOS `UIViewContentModes` aspectFit, aspectFill and scaleFill + +You can also set the animation progress interactively. +```objective-c +CGPoint translation = [gesture getTranslationInView:self.view]; +CGFloat progress = translation.y / self.view.bounds.size.height; +animationView.animationProgress = progress; +``` + +Or you can play just a portion of the animation: +```objective-c +[lottieAnimation playFromProgress:0.25 toProgress:0.5 withCompletion:^(BOOL animationFinished) { + // Do Something +}]; +``` +## Swift Examples + +Lottie animations can be loaded from bundled JSON or from a URL +To bundle JSON just add it and any images that the animation requires to your target in xcode. + +```swift +let animationView = LOTAnimationView(name: "LottieLogo") +self.view.addSubview(animationView) +animationView.play{ (finished) in + // Do Something +} +``` + +If your animation is in another bundle you can use +```swift +let animationView = LOTAnimationView(name: "LottieLogo", bundle: yourBundle) +self.view.addSubview(animationView) +animationView.play() +``` + +Or you can load it asynchronously from a URL +```swift +let animationView = LOTAnimationView(contentsOf: WebURL) +self.view.addSubview(animationView) +animationView.play() +``` + +You can also set the animation progress interactively. +```swift +let translation = gesture.getTranslationInView(self.view) +let progress = translation.y / self.view.bounds.size.height +animationView.animationProgress = progress +``` + +Or you can play just a portion of the animation: +```swift +animationView.play(fromProgress: 0.25, toProgress: 0.5, withCompletion: nil) +``` + +## iOS View Controller Transitioning + +Lottie comes with a `UIViewController` animation-controller for making custom viewController transitions! + +![Transition1](_Gifs/transitionMasked.gif) +![Transition2](_Gifs/transitionPosition.gif) + +Just become the delegate for a transition + +```objective-c +- (void)_showTransitionA { + ToAnimationViewController *vc = [[ToAnimationViewController alloc] init]; + vc.transitioningDelegate = self; + [self presentViewController:vc animated:YES completion:NULL]; +} +``` + +And implement the delegate methods with a `LOTAnimationTransitionController` + +```objective-c +#pragma mark -- View Controller Transitioning + +- (id)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { + LOTAnimationTransitionController *animationController = [[LOTAnimationTransitionController alloc] initWithAnimationNamed:@"vcTransition1" fromLayerNamed:@"outLayer" toLayerNamed:@"inLayer" applyAnimationTransform:NO]; + return animationController; +} + +- (id)animationControllerForDismissedController:(UIViewController *)dismissed { + LOTAnimationTransitionController *animationController = [[LOTAnimationTransitionController alloc] initWithAnimationNamed:@"vcTransition2" fromLayerNamed:@"outLayer" toLayerNamed:@"inLayer" applyAnimationTransform:NO]; + return animationController; +} + +``` + +By setting `applyAnimationTransform` to YES you can make the Lottie animation move the from and to view controllers. They will be positioned at the origin of the layer. When set to NO Lottie just masks the view controller with the specified layer while respecting z order. + +## Debugging +Lottie has a couple of debugging features to know about. +When an animation is loaded unsupported features are logged out in the console with their function names. + +If you checkout LOTHelpers.h you will see two debug flags. `ENABLE_DEBUG_LOGGING` and `ENABLE_DEBUG_SHAPES`. +`ENABLE_DEBUG_LOGGING` increases the verbosity of Lottie Logging. It logs anytime an animation node is set during animation. If your animation if not working, turn this on and play your animation. The console log might give you some clues as to whats going on. + +`ENABLE_DEBUG_SHAPES` Draws a colored square for the anchor-point of every layer and shape. This is helpful to see if anything is on screen. + +### Keypaths + +LOTAnimationView provides `- (void)logHierarchyKeypaths` which will recursively log all settable keypaths for the animation. This is helpful for changing animations at runtime. + +## Adding Views to an Animation at Runtime + +Not only can you [change animations at runtime](#changing-animations-at-runtime) with Lottie, you can also add custom UI to a LOTAnimation at runtime. +The example below shows some advance uses of this to create a dynamic image loader. + +## A Dynamic Image Loading Spinner + +![Spinner](/_Gifs/spinner.gif) + +The example above shows a single LOTAnimationView that is set with a loading spinner animation. The loading spinner loops a portion of its animation while an image is downloaded asynchronously. When the download is complete, the image is added to the animation and the rest of the animation is played seamlessly. The image is cleanly animated in and a completion block is called. + +![Spinner_Alt](/_Gifs/spinner_Alternative.gif) + +Now, the animation has been changed by a designer and needs to be updated. All that is required is updating the JSON file in the bundle. No code change needed! + +![Spinner_Dark](/_Gifs/spinner_DarkMode.gif) + +Here, the design has decided to add a 'Dark Mode' to the app. Just a few lines of code change the color of the animation at runtime. + + +Pretty powerful eh? + +Check out the code below for an example! + +```swift + +import UIKit +import Lottie + +class ViewController: UIViewController { + + var animationView: LOTAnimationView = LOTAnimationView(name: "SpinnerSpin"); + + override func viewDidLoad() { + super.viewDidLoad() + + // Setup our animation view + animationView.contentMode = .scaleAspectFill + animationView.frame = CGRect(x: 20, y: 20, width: 200, height: 200) + + self.view.addSubview(animationView) + // Lets change some of the properties of the animation + // We aren't going to use the MaskLayer, so let's just hide it + animationView.setValue(0, forKeypath: "MaskLayer.Ellipse 1.Transform.Opacity", atFrame: 0) + // All of the strokes and fills are white, lets make them DarkGrey + animationView.setValue(UIColor.darkGray, forKeypath: "OuterRing.Stroke.Color", atFrame: 0) + animationView.setValue(UIColor.darkGray, forKeypath: "InnerRing.Stroke.Color", atFrame: 0) + animationView.setValue(UIColor.darkGray, forKeypath: "InnerRing.Fill.Color", atFrame: 0) + + // Lets turn looping on, since we want it to repeat while the image is 'Downloading' + animationView.loopAnimation = true + // Now play from 0 to 0.5 progress and loop indefinitely. + animationView.play(fromProgress: 0, toProgress: 0.5, withCompletion: nil) + + // Lets simulate a download that finishes in 4 seconds. + let dispatchTime = DispatchTime.now() + 4.0 + DispatchQueue.main.asyncAfter(deadline: dispatchTime) { + self.simulateImageDownloaded() + } + } + + func simulateImageDownloaded() { + // Our downloaded image + let image = UIImage(named: "avatar.jpg") + let imageView = UIImageView(image: image) + + // We want the image to show up centered in the animation view at 150Px150P + // Convert that rect to the animations coordinate space + // The origin is set to -75, -75 because the origin is centered in the animation view + let imageRect = animationView.convert(CGRect(x: -75, y: -75, width: 150, height: 150), toLayerNamed: nil) + + // Setup our image view with the rect and add rounded corners + imageView.frame = imageRect + imageView.layer.masksToBounds = true + imageView.layer.cornerRadius = imageRect.width / 2; + + // Now we set the completion block on the currently running animation + animationView.completionBlock = { (result: Bool) in () + // Add the image view to the layer named "TransformLayer" + self.animationView.addSubview(imageView, toLayerNamed: "TransformLayer", applyTransform: true) + // Now play the last half of the animation + self.animationView.play(fromProgress: 0.5, toProgress: 1, withCompletion: { (complete: Bool) in + // Now the animation has finished and our image is displayed on screen + print("Image Downloaded and Displayed") + }) + } + + // Turn looping off. Once the current loop finishes the animation will stop + // and the completion block will be called. + animationView.loopAnimation = false + } + +} + +``` + +## Changing Animations At Runtime + +Lottie can do more than just play beautiful animations. Lottie allows you to **change** animations at runtime. + +### Say we want to create 4 toggle switches. +![Toggle](_Gifs/switch_Normal.gif) +Its easy to create the four switches and play them: + +```swift +let animationView = LOTAnimationView(name: "toggle"); +self.view.addSubview(animationView) +animationView.frame.origin.x = 40 +animationView.frame.origin.y = 20 +animationView.autoReverseAnimation = true +animationView.loopAnimation = true +animationView.play() + +let animationView2 = LOTAnimationView(name: "toggle"); +self.view.addSubview(animationView2) +animationView2.frame.origin.x = 40 +animationView2.frame.origin.y = animationView.frame.maxY + 4 +animationView2.autoReverseAnimation = true +animationView2.loopAnimation = true +animationView2.play() + +let animationView3 = LOTAnimationView(name: "toggle"); +self.view.addSubview(animationView3) +animationView3.frame.origin.x = 40 +animationView3.frame.origin.y = animationView2.frame.maxY + 4 +animationView3.autoReverseAnimation = true +animationView3.loopAnimation = true +animationView3.play() + +let animationView4 = LOTAnimationView(name: "toggle"); +self.view.addSubview(animationView4) +animationView4.frame.origin.x = 40 +animationView4.frame.origin.y = animationView3.frame.maxY + 4 +animationView4.autoReverseAnimation = true +animationView4.loopAnimation = true +animationView4.play() + +``` +### Now lets change their colors +![Recolored Toggle](_Gifs/switch_BgColors.gif) + +**NB**: `animationView.setValue(YOUR_COLOR, forKeypath: "YOUR_PATH.Color", atFrame: 0)` is now deprecated. + +```swift +class GreenDelegate : NSObject, LOTColorValueDelegate { + func color(forFrame currentFrame: CGFloat, startKeyframe: CGFloat, endKeyframe: CGFloat, interpolatedProgress: CGFloat, start startColor: CGColor!, end endColor: CGColor!, currentColor interpolatedColor: CGColor!) -> Unmanaged! { + return Unmanaged.passRetained(UIColor.green.cgColor) + } +} +animationView2.setValueDelegate(GreenDelegate(), for: LOTKeypath(string: "BG-On.Group 1.Fill 1.Color")) + +class RedDelegate : NSObject, LOTColorValueDelegate { + func color(forFrame currentFrame: CGFloat, startKeyframe: CGFloat, endKeyframe: CGFloat, interpolatedProgress: CGFloat, start startColor: CGColor!, end endColor: CGColor!, currentColor interpolatedColor: CGColor!) -> Unmanaged! { + return Unmanaged.passRetained(UIColor.red.cgColor) + } +} +animationView3.setValueDelegate(RedDelegate(), for: LOTKeypath(string: "BG-On.Group 1.Fill 1.Color")) + +class OrangeDelegate : NSObject, LOTColorValueDelegate { + func color(forFrame currentFrame: CGFloat, startKeyframe: CGFloat, endKeyframe: CGFloat, interpolatedProgress: CGFloat, start startColor: CGColor!, end endColor: CGColor!, currentColor interpolatedColor: CGColor!) -> Unmanaged! { + return Unmanaged.passRetained(UIColor.orange.cgColor) + } +} +animationView4.setValueDelegate(OrangeDelegate(), for: LOTKeypath(string: "BG-On.Group 1.Fill 1.Color")) +``` +The keyPath is a dot separated path of layer and property names from After Effects. +LOTAnimationView provides `- (void)logHierarchyKeypaths` which will recursively log all settable keypaths for the animation. +![Key Path](_Gifs/aftereffectskeypath.png) +"BG-On.Group 1.Fill 1.Color" + +### Now lets change a couple of properties +![Multiple Colors](_Gifs/switch_MultipleBgs.gif) + +```swift +animationView2.setValueDelegate(delegate, for: LOTKeypath(string: YOUR_PATH)) +``` + +Lottie allows you to change **any** property that is animatable in After Effects. If a keyframe does not exist, a linear keyframe is created for you. If a keyframe does exist then just its data is replaced. + +For this you need to use a `LOTValueDelegate` there are many already available: +* `LOTColorValueDelegate` +* `LOTNumberValueDelegate` +* `LOTPointValueDelegate` +* `LOTSizeValueDelegate` +* `LOTPathValueDelegate` + +## Animated Controls and Switches + +![Animated Buttons](_Gifs/switchTest.gif) + +Lottie also has a custom subclass of UIControl for creating custom animatable interactive controls. +Currently Lottie has `LOTAnimatedSwitch` which is a toggle style switch control. Tapping on the switch plays either the On-Off or Off-On animation and sends out a UIControlStateValueChanged broadcast to all targets. It is used in the same way UISwitch is used with a few additions to setup the animation with Lottie. + +You initialize the switch either using the convenience method or by supplying the animation directly. + +``` +// Convenience +LOTAnimatedSwitch *toggle1 = [LOTAnimatedSwitch switchNamed:@"Switch"]; + +// Manually +LOTComposition *comp = [LOTComposition animationNamed:@"Switch"]; +LOTAnimatedSwitch *toggle1 = [[LOTAnimatedSwitch alloc] initWithFrame:CGRectZero]; +[toggle1 setAnimationComp:comp]; +``` + +You can also specify a specific portion of the animation's timeline for the On and Off animation. +By default `LOTAnimatedSwitch` will play the animation forward for On and backwards for off. + +Lets say that the supplied animation animates ON from 0.5-1 progress and OFF from 0-0.5: + +``` +/// On animation is 0.5 to 1 progress. +[toggle1 setProgressRangeForOnState:0.5 toProgress:1]; + +/// Off animation is 0 to 0.5 progress. +[toggle1 setProgressRangeForOffState:0 toProgress:0.5]; +``` + +Also, all LOTAnimatedControls add support for changing appearance for state changes. This requires some setup in After Effects. Lottie will switch visible animated layers based on the controls state. This can be used to have Disabled, selected, or Highlighted states. These states are associated with layer names in After Effects, and are dynamically displayed as the control changes states. + +Lets say we have a toggle switch with a Normal and Disabled state. In Effects we have a composition that contains Precomps of the regular "Button" and disabled "Disabled" states. They have different visual styles. + +![Regular](_Gifs/switch_enabled.png) +![Disabled](_Gifs/switch_disabled.png) + +Now in code we can associate `UIControlState` with these layers + +``` +// Specify the layer names for different states +[statefulSwitch setLayerName:@"Button" forState:UIControlStateNormal]; +[statefulSwitch setLayerName:@"Disabled" forState:UIControlStateDisabled]; + +// Changes visual appearance by switching animation layer to "Disabled" +statefulSwitch.enabled = NO; + +// Changes visual appearance by switching animation layer to "Button" +statefulSwitch.enabled = YES; +``` + +## Supported After Effects Features + +### Keyframe Interpolation + +--- + +* Linear Interpolation +* Bezier Interpolation +* Hold Interpolation +* Rove Across Time +* Spatial Bezier + +### Solids + +--- + +* Transform Anchor Point +* Transform Position +* Transform Scale +* Transform Rotation +* Transform Opacity + +### Masks + +--- + +* Path +* Opacity +* Multiple Masks (additive, subtractive and intersection) + +### Track Mattes + +--- + +* Alpha Matte + +### Parenting + +--- + +* Multiple Parenting +* Nulls + +### Shape Layers + +--- + +* Anchor Point +* Position +* Scale +* Rotation +* Opacity +* Path +* Group Transforms (Anchor point, position, scale etc) +* Rectangle (All properties) +* Eclipse (All properties) +* Multiple paths in one group +* Even-Odd winding paths +* Reverse Fill Rule + +#### Stroke (shape layer) + +--- + +* Stroke Color +* Stroke Opacity +* Stroke Width +* Line Cap +* Dashes (Now Animated!) + +#### Fill (shape layer) + +--- + +* Fill Color +* Fill Opacity + +#### Trim Paths (shape layer) + +--- + +* Trim Paths Start +* Trim Paths End +* Trim Paths Offset + +### Repeaters + +--- + +* Supports repeater transforms +* Offset currently not supported. + +### Gradients + +--- + +* Support for Linear Gradients +* Support for Radial Gradients + +### Polystar and Polygon + +--- + +* Supported! Theres a known bug if the roundness is greater than 100 percent. + +#### Layer Features + +--- + +* Precomps +* Image Layers +* Shape Layers +* Null Layers +* Solid Layers +* Parenting Layers +* Alpha Matte Layers + +## Currently Unsupported After Effects Features + +* Merge Shapes +* Alpha Inverted Masks +* Trim Shapes Individually feature of Trim Paths +* Expressions +* 3d Layer support +* Time remapping / Layer Reverse +* Layer Blend Modes +* Layer Effects + + +## Community Contributions + * [Xamarin bindings](https://github.com/martijn00/LottieXamarin) + * [NativeScript bindings](https://github.com/bradmartin/nativescript-lottie) + * [Appcelerator Titanium bindings](https://github.com/m1ga/ti.animation) + * macOS Support added by [Alex Pawlowski](https://github.com/pawlowskialex) + +## Alternatives +1. Build animations by hand. Building animations by hand is a huge time commitment for design and engineering across Android and iOS. It's often hard or even impossible to justify spending so much time to get an animation right. +2. [Facebook Keyframes](https://github.com/facebookincubator/Keyframes). Keyframes is a wonderful new library from Facebook that they built for reactions. However, Keyframes doesn't support some of Lottie's features such as masks, mattes, trim paths, dash patterns, and more. +2. Gifs. Gifs are more than double the size of a bodymovin JSON and are rendered at a fixed size that can't be scaled up to match large and high density screens. +3. Png sequences. Png sequences are even worse than gifs in that their file sizes are often 30-50x the size of the bodymovin json and also can't be scaled up. + +## Why is it called Lottie? +Lottie is named after a German film director and the foremost pioneer of silhouette animation. Her best known films are The Adventures of Prince Achmed (1926) – the oldest surviving feature-length animated film, preceding Walt Disney's feature-length Snow White and the Seven Dwarfs (1937) by over ten years +[The art of Lotte Reineger](https://www.youtube.com/watch?v=LvU55CUw5Ck&feature=youtu.be) + +## Contributing +Contributors are more than welcome. Just upload a PR with a description of your changes. + +If you would like to add more JSON files feel free to do so! + +## Issues or feature requests? +File github issues for anything that is unexpectedly broken. If an After Effects file is not working, please attach it to your issue. Debugging without the original file is much more difficult. Lottie is developed and maintained by [Brandon Withrow](mailto:brandon@withrow.io). Feel free to reach out via email or [Twitter](https://twitter.com/theWithra) + +## Roadmap (In no particular order) +- Add support for interactive animated transitions diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h new file mode 100644 index 0000000..b52e0d6 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h @@ -0,0 +1,46 @@ +// +// LOTCompositionContainer.h +// Lottie +// +// Created by brandon_withrow on 7/18/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTLayerContainer.h" +#import "LOTAssetGroup.h" + +@interface LOTCompositionContainer : LOTLayerContainer + +- (instancetype _Nonnull)initWithModel:(LOTLayer * _Nullable)layer + inLayerGroup:(LOTLayerGroup * _Nullable)layerGroup + withLayerGroup:(LOTLayerGroup * _Nullable)childLayerGroup + withAssestGroup:(LOTAssetGroup * _Nullable)assetGroup; + +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath; + +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent; + +- (void)addSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +- (void)maskSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +@property (nonatomic, readonly, nonnull) NSArray *childLayers; +@property (nonatomic, readonly, nonnull) NSDictionary *childMap; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m new file mode 100644 index 0000000..9993df7 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m @@ -0,0 +1,239 @@ +// +// LOTCompositionContainer.m +// Lottie +// +// Created by brandon_withrow on 7/18/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTCompositionContainer.h" +#import "LOTAsset.h" +#import "CGGeometry+LOTAdditions.h" +#import "LOTHelpers.h" +#import "LOTValueInterpolator.h" +#import "LOTAnimatorNode.h" +#import "LOTRenderNode.h" +#import "LOTRenderGroup.h" +#import "LOTNumberInterpolator.h" + +@implementation LOTCompositionContainer { + NSNumber *_frameOffset; + CALayer *DEBUG_Center; + NSMutableDictionary *_keypathCache; + LOTNumberInterpolator *_timeInterpolator; +} + +- (instancetype)initWithModel:(LOTLayer *)layer + inLayerGroup:(LOTLayerGroup *)layerGroup + withLayerGroup:(LOTLayerGroup *)childLayerGroup + withAssestGroup:(LOTAssetGroup *)assetGroup { + self = [super initWithModel:layer inLayerGroup:layerGroup]; + if (self) { + DEBUG_Center = [CALayer layer]; + + DEBUG_Center.bounds = CGRectMake(0, 0, 20, 20); + DEBUG_Center.borderColor = [UIColor orangeColor].CGColor; + DEBUG_Center.borderWidth = 2; + DEBUG_Center.masksToBounds = YES; + if (ENABLE_DEBUG_SHAPES) { + [self.wrapperLayer addSublayer:DEBUG_Center]; + } + if (layer.startFrame != nil) { + _frameOffset = layer.startFrame; + } else { + _frameOffset = @0; + } + + if (layer.timeRemapping) { + _timeInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:layer.timeRemapping.keyframes]; + } + + [self initializeWithChildGroup:childLayerGroup withAssetGroup:assetGroup]; + } + return self; +} + +- (void)initializeWithChildGroup:(LOTLayerGroup *)childGroup + withAssetGroup:(LOTAssetGroup *)assetGroup { + NSMutableDictionary *childMap = [NSMutableDictionary dictionary]; + NSMutableArray *children = [NSMutableArray array]; + NSArray *reversedItems = [[childGroup.layers reverseObjectEnumerator] allObjects]; + + CALayer *maskedLayer = nil; + for (LOTLayer *layer in reversedItems) { + LOTAsset *asset; + if (layer.referenceID) { + // Get relevant Asset + asset = [assetGroup assetModelForID:layer.referenceID]; + } + + LOTLayerContainer *child = nil; + if (asset.layerGroup) { + // Layer is a precomp + LOTCompositionContainer *compLayer = [[LOTCompositionContainer alloc] initWithModel:layer inLayerGroup:childGroup withLayerGroup:asset.layerGroup withAssestGroup:assetGroup]; + child = compLayer; + } else { + child = [[LOTLayerContainer alloc] initWithModel:layer inLayerGroup:childGroup]; + } + if (maskedLayer) { + maskedLayer.mask = child; + maskedLayer = nil; + } else { + if (layer.matteType == LOTMatteTypeAdd) { + maskedLayer = child; + } + [self.wrapperLayer addSublayer:child]; + } + [children addObject:child]; + if (child.layerName) { + [childMap setObject:child forKey:child.layerName]; + } + } + _childMap = childMap; + _childLayers = children; +} + +- (void)displayWithFrame:(NSNumber *)frame forceUpdate:(BOOL)forceUpdate { + if (ENABLE_DEBUG_LOGGING) NSLog(@"-------------------- Composition Displaying Frame %@ --------------------", frame); + [super displayWithFrame:frame forceUpdate:forceUpdate]; + NSNumber *newFrame = @((frame.floatValue - _frameOffset.floatValue) / self.timeStretchFactor.floatValue); + if (_timeInterpolator) { + newFrame = @([_timeInterpolator floatValueForFrame:newFrame]); + } + for (LOTLayerContainer *child in _childLayers) { + [child displayWithFrame:newFrame forceUpdate:forceUpdate]; + } + if (ENABLE_DEBUG_LOGGING) NSLog(@"-------------------- ------------------------------- --------------------"); + if (ENABLE_DEBUG_LOGGING) NSLog(@"-------------------- ------------------------------- --------------------"); +} + +- (void)setViewportBounds:(CGRect)viewportBounds { + [super setViewportBounds:viewportBounds]; + for (LOTLayerContainer *layer in _childLayers) { + layer.viewportBounds = viewportBounds; + } +} + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + if (self.layerName != nil) { + [super searchNodesForKeypath:keypath]; + } + if (self.layerName == nil || + [keypath pushKey:self.layerName]) { + for (LOTLayerContainer *child in _childLayers) { + [child searchNodesForKeypath:keypath]; + } + if (self.layerName != nil) { + [keypath popKey]; + } + } +} + +- (void)setValueDelegate:(id _Nonnull)delegate + forKeypath:(LOTKeypath * _Nonnull)keypath { + if (self.layerName != nil) { + [super setValueDelegate:delegate forKeypath:keypath]; + } + if (self.layerName == nil || + [keypath pushKey:self.layerName]) { + for (LOTLayerContainer *child in _childLayers) { + [child setValueDelegate:delegate forKeypath:keypath]; + } + if (self.layerName != nil) { + [keypath popKey]; + } + } +} + +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath { + if (_keypathCache == nil) { + _keypathCache = [NSMutableDictionary dictionary]; + } + [self searchNodesForKeypath:keypath]; + [_keypathCache addEntriesFromDictionary:keypath.searchResults]; + return keypath.searchResults.allKeys; +} + +- (CALayer *)_layerForKeypath:(nonnull LOTKeypath *)keypath { + id node = _keypathCache[keypath.absoluteKeypath]; + if (node == nil) { + [self keysForKeyPath:keypath]; + node = _keypathCache[keypath.absoluteKeypath]; + } + if (node == nil) { + NSLog(@"LOTComposition could not find layer for keypath:%@", keypath.absoluteKeypath); + return nil; + } + if ([node isKindOfClass:[CALayer class]]) { + return (CALayer *)node; + } + if (![node isKindOfClass:[LOTRenderNode class]]) { + NSLog(@"LOTComposition: Keypath return non-layer node:%@ ", keypath.absoluteKeypath); + return nil; + } + if ([node isKindOfClass:[LOTRenderGroup class]]) { + return [(LOTRenderGroup *)node containerLayer]; + } + LOTRenderNode *renderNode = (LOTRenderNode *)node; + return renderNode.outputLayer; +} + +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGPointZero; + } + return [parent convertPoint:point toLayer:layer]; +} + +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGRectZero; + } + return [parent convertRect:rect toLayer:layer]; +} + +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGPointZero; + } + return [parent convertPoint:point fromLayer:layer]; +} + +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath + withParentLayer:(CALayer *_Nonnull)parent{ + CALayer *layer = [self _layerForKeypath:keypath]; + if (!layer) { + return CGRectZero; + } + return [parent convertRect:rect fromLayer:layer]; +} + +- (void)addSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath { + CALayer *layer = [self _layerForKeypath:keypath]; + if (layer) { + [layer addSublayer:subLayer]; + } +} + +- (void)maskSublayer:(nonnull CALayer *)subLayer + toKeypathLayer:(nonnull LOTKeypath *)keypath { + CALayer *layer = [self _layerForKeypath:keypath]; + if (layer) { + [layer.superlayer addSublayer:subLayer]; + [layer removeFromSuperlayer]; + subLayer.mask = layer; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h new file mode 100644 index 0000000..6e4be74 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h @@ -0,0 +1,37 @@ +// +// LOTLayerContainer.h +// Lottie +// +// Created by brandon_withrow on 7/18/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPlatformCompat.h" +#import "LOTLayer.h" +#import "LOTLayerGroup.h" +#import "LOTKeypath.h" +#import "LOTValueDelegate.h" + +@class LOTValueCallback; + +@interface LOTLayerContainer : CALayer + +- (instancetype _Nonnull)initWithModel:(LOTLayer * _Nullable)layer + inLayerGroup:(LOTLayerGroup * _Nullable)layerGroup; + +@property (nonatomic, readonly, strong, nullable) NSString *layerName; +@property (nonatomic, nullable) NSNumber *currentFrame; +@property (nonatomic, readonly, nonnull) NSNumber *timeStretchFactor; +@property (nonatomic, assign) CGRect viewportBounds; +@property (nonatomic, readonly, nonnull) CALayer *wrapperLayer; +@property (nonatomic, readonly, nonnull) NSDictionary *valueInterpolators; + +- (void)displayWithFrame:(NSNumber * _Nonnull)frame; +- (void)displayWithFrame:(NSNumber * _Nonnull)frame forceUpdate:(BOOL)forceUpdate; + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath; + +- (void)setValueDelegate:(id _Nonnull)delegate + forKeypath:(LOTKeypath * _Nonnull)keypath; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m new file mode 100644 index 0000000..9653daa --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m @@ -0,0 +1,336 @@ +// +// LOTLayerContainer.m +// Lottie +// +// Created by brandon_withrow on 7/18/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTLayerContainer.h" +#import "LOTTransformInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "CGGeometry+LOTAdditions.h" +#import "LOTRenderGroup.h" +#import "LOTHelpers.h" +#import "LOTMaskContainer.h" +#import "LOTAsset.h" + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR +#import "LOTCacheProvider.h" +#endif + +@implementation LOTLayerContainer { + LOTTransformInterpolator *_transformInterpolator; + LOTNumberInterpolator *_opacityInterpolator; + NSNumber *_inFrame; + NSNumber *_outFrame; + CALayer *DEBUG_Center; + LOTRenderGroup *_contentsGroup; + LOTMaskContainer *_maskLayer; +} + +@dynamic currentFrame; + +- (instancetype)initWithModel:(LOTLayer *)layer + inLayerGroup:(LOTLayerGroup *)layerGroup { + self = [super init]; + if (self) { + _wrapperLayer = [CALayer new]; + [self addSublayer:_wrapperLayer]; + DEBUG_Center = [CALayer layer]; + + DEBUG_Center.bounds = CGRectMake(0, 0, 20, 20); + DEBUG_Center.borderColor = [UIColor blueColor].CGColor; + DEBUG_Center.borderWidth = 2; + DEBUG_Center.masksToBounds = YES; + + if (ENABLE_DEBUG_SHAPES) { + [_wrapperLayer addSublayer:DEBUG_Center]; + } + self.actions = @{@"hidden" : [NSNull null], @"opacity" : [NSNull null], @"transform" : [NSNull null]}; + _wrapperLayer.actions = [self.actions copy]; + _timeStretchFactor = @1; + [self commonInitializeWith:layer inLayerGroup:layerGroup]; + } + return self; +} + +- (void)commonInitializeWith:(LOTLayer *)layer + inLayerGroup:(LOTLayerGroup *)layerGroup { + if (layer == nil) { + return; + } + _layerName = layer.layerName; + if (layer.layerType == LOTLayerTypeImage || + layer.layerType == LOTLayerTypeSolid || + layer.layerType == LOTLayerTypePrecomp) { + _wrapperLayer.bounds = CGRectMake(0, 0, layer.layerWidth.floatValue, layer.layerHeight.floatValue); + _wrapperLayer.anchorPoint = CGPointMake(0, 0); + _wrapperLayer.masksToBounds = YES; + DEBUG_Center.position = LOT_RectGetCenterPoint(self.bounds); + } + + if (layer.layerType == LOTLayerTypeImage) { + [self _setImageForAsset:layer.imageAsset]; + } + + _inFrame = [layer.inFrame copy]; + _outFrame = [layer.outFrame copy]; + + _timeStretchFactor = [layer.timeStretch copy]; + _transformInterpolator = [LOTTransformInterpolator transformForLayer:layer]; + + if (layer.parentID != nil) { + NSNumber *parentID = layer.parentID; + LOTTransformInterpolator *childInterpolator = _transformInterpolator; + while (parentID != nil) { + LOTLayer *parentModel = [layerGroup layerModelForID:parentID]; + LOTTransformInterpolator *interpolator = [LOTTransformInterpolator transformForLayer:parentModel]; + childInterpolator.inputNode = interpolator; + childInterpolator = interpolator; + parentID = parentModel.parentID; + } + } + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:layer.opacity.keyframes]; + if (layer.layerType == LOTLayerTypeShape && + layer.shapes.count) { + [self buildContents:layer.shapes]; + } + if (layer.layerType == LOTLayerTypeSolid) { + _wrapperLayer.backgroundColor = layer.solidColor.CGColor; + } + if (layer.masks.count) { + _maskLayer = [[LOTMaskContainer alloc] initWithMasks:layer.masks]; + _wrapperLayer.mask = _maskLayer; + } + + NSMutableDictionary *interpolators = [NSMutableDictionary dictionary]; + interpolators[@"Opacity"] = _opacityInterpolator; + interpolators[@"Anchor Point"] = _transformInterpolator.anchorInterpolator; + interpolators[@"Scale"] = _transformInterpolator.scaleInterpolator; + interpolators[@"Rotation"] = _transformInterpolator.rotationInterpolator; + if (_transformInterpolator.positionXInterpolator && + _transformInterpolator.positionYInterpolator) { + interpolators[@"X Position"] = _transformInterpolator.positionXInterpolator; + interpolators[@"Y Position"] = _transformInterpolator.positionYInterpolator; + } else if (_transformInterpolator.positionInterpolator) { + interpolators[@"Position"] = _transformInterpolator.positionInterpolator; + } + + // Deprecated + interpolators[@"Transform.Opacity"] = _opacityInterpolator; + interpolators[@"Transform.Anchor Point"] = _transformInterpolator.anchorInterpolator; + interpolators[@"Transform.Scale"] = _transformInterpolator.scaleInterpolator; + interpolators[@"Transform.Rotation"] = _transformInterpolator.rotationInterpolator; + if (_transformInterpolator.positionXInterpolator && + _transformInterpolator.positionYInterpolator) { + interpolators[@"Transform.X Position"] = _transformInterpolator.positionXInterpolator; + interpolators[@"Transform.Y Position"] = _transformInterpolator.positionYInterpolator; + } else if (_transformInterpolator.positionInterpolator) { + interpolators[@"Transform.Position"] = _transformInterpolator.positionInterpolator; + } + _valueInterpolators = interpolators; +} + +- (void)buildContents:(NSArray *)contents { + _contentsGroup = [[LOTRenderGroup alloc] initWithInputNode:nil contents:contents keyname:_layerName]; + [_wrapperLayer addSublayer:_contentsGroup.containerLayer]; +} + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +- (void)_setImageForAsset:(LOTAsset *)asset { + if (asset.imageName) { + UIImage *image; + if ([asset.imageName hasPrefix:@"data:"]) { + // Contents look like a data: URL. Ignore asset.imageDirectory and simply load the image directly. + NSURL *imageUrl = [NSURL URLWithString:asset.imageName]; + NSData *imageData = [NSData dataWithContentsOfURL:imageUrl]; + image = [UIImage imageWithData:imageData]; + } else if (asset.rootDirectory.length > 0) { + NSString *rootDirectory = asset.rootDirectory; + if (asset.imageDirectory.length > 0) { + rootDirectory = [rootDirectory stringByAppendingPathComponent:asset.imageDirectory]; + } + NSString *imagePath = [rootDirectory stringByAppendingPathComponent:asset.imageName]; + + id imageCache = [LOTCacheProvider imageCache]; + if (imageCache) { + image = [imageCache imageForKey:imagePath]; + if (!image) { + image = [UIImage imageWithContentsOfFile:imagePath]; + [imageCache setImage:image forKey:imagePath]; + } + } else { + image = [UIImage imageWithContentsOfFile:imagePath]; + } + } else { + NSString *imagePath = [asset.assetBundle pathForResource:asset.imageName ofType:nil]; + image = [UIImage imageWithContentsOfFile:imagePath]; + } + + //try loading from asset catalogue instead if all else fails + if (!image) { + image = [UIImage imageNamed:asset.imageName inBundle: asset.assetBundle compatibleWithTraitCollection:nil]; + } + + if (image) { + _wrapperLayer.contents = (__bridge id _Nullable)(image.CGImage); + } else { + NSLog(@"%s: Warn: image not found: %@", __PRETTY_FUNCTION__, asset.imageName); + } + } +} + +#else + +- (void)_setImageForAsset:(LOTAsset *)asset { + if (asset.imageName) { + NSImage *image; + if ([asset.imageName hasPrefix:@"data:"]) { + // Contents look like a data: URL. Ignore asset.imageDirectory and simply load the image directly. + NSURL *imageUrl = [NSURL URLWithString:asset.imageName]; + NSData *imageData = [NSData dataWithContentsOfURL:imageUrl]; + image = [[NSImage alloc] initWithData:imageData]; + } else { + image = [NSImage imageNamed:[asset.imageName stringByDeletingPathExtension]]; + } + if (image == nil) { + if (asset.rootDirectory.length > 0 && asset.imageDirectory.length > 0) { + NSString *imagePath = [[asset.rootDirectory stringByAppendingPathComponent:asset.imageDirectory] stringByAppendingPathComponent:asset.imageName]; + image = [[NSImage alloc] initWithContentsOfFile:imagePath]; + } + } + if (image) { + NSWindow *window = [NSApp mainWindow]; + CGFloat desiredScaleFactor = [window backingScaleFactor]; + CGFloat actualScaleFactor = [image recommendedLayerContentsScale:desiredScaleFactor]; + id layerContents = [image layerContentsForContentsScale:actualScaleFactor]; + _wrapperLayer.contents = layerContents; + } + } + +} + +#endif + +// MARK - Animation + ++ (BOOL)needsDisplayForKey:(NSString *)key { + if ([key isEqualToString:@"currentFrame"]) { + return YES; + } + return [super needsDisplayForKey:key]; +} + +- (id)actionForKey:(NSString *)event { + if ([event isEqualToString:@"currentFrame"]) { + CABasicAnimation *theAnimation = [CABasicAnimation + animationWithKeyPath:event]; + theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; + theAnimation.fromValue = [[self presentationLayer] valueForKey:event]; + return theAnimation; + } + return [super actionForKey:event]; +} + +- (id)initWithLayer:(id)layer { + if (self = [super initWithLayer:layer]) { + if ([layer isKindOfClass:[LOTLayerContainer class]]) { + LOTLayerContainer *other = (LOTLayerContainer *)layer; + self.currentFrame = [other.currentFrame copy]; + } + } + return self; +} + +- (void)display { + @synchronized(self) { + LOTLayerContainer *presentation = self; + if (self.animationKeys.count && + self.presentationLayer) { + presentation = (LOTLayerContainer *)self.presentationLayer; + } + [self displayWithFrame:presentation.currentFrame]; + } +} + +- (void)displayWithFrame:(NSNumber *)frame { + [self displayWithFrame:frame forceUpdate:NO]; +} + +- (void)displayWithFrame:(NSNumber *)frame forceUpdate:(BOOL)forceUpdate { + NSNumber *newFrame = @(frame.floatValue / self.timeStretchFactor.floatValue); + if (ENABLE_DEBUG_LOGGING) NSLog(@"View %@ Displaying Frame %@, with local time %@", self, frame, newFrame); + BOOL hidden = NO; + if (_inFrame && _outFrame) { + hidden = (frame.floatValue < _inFrame.floatValue || + frame.floatValue > _outFrame.floatValue); + } + self.hidden = hidden; + if (hidden) { + return; + } + if (_opacityInterpolator && [_opacityInterpolator hasUpdateForFrame:newFrame]) { + self.opacity = [_opacityInterpolator floatValueForFrame:newFrame]; + } + if (_transformInterpolator && [_transformInterpolator hasUpdateForFrame:newFrame]) { + _wrapperLayer.transform = [_transformInterpolator transformForFrame:newFrame]; + } + [_contentsGroup updateWithFrame:newFrame withModifierBlock:nil forceLocalUpdate:forceUpdate]; + _maskLayer.currentFrame = newFrame; +} + +- (void)setViewportBounds:(CGRect)viewportBounds { + _viewportBounds = viewportBounds; + if (_maskLayer) { + CGPoint center = LOT_RectGetCenterPoint(viewportBounds); + viewportBounds.origin = CGPointMake(-center.x, -center.y); + _maskLayer.bounds = viewportBounds; + } +} + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + if (_contentsGroup == nil && [keypath pushKey:self.layerName]) { + // Matches self. + if ([keypath pushKey:@"Transform"]) { + // Is a transform node, check interpolators + LOTValueInterpolator *interpolator = _valueInterpolators[keypath.currentKey]; + if (interpolator) { + // We have a match! + [keypath pushKey:keypath.currentKey]; + [keypath addSearchResultForCurrentPath:_wrapperLayer]; + [keypath popKey]; + } + if (keypath.endOfKeypath) { + [keypath addSearchResultForCurrentPath:_wrapperLayer]; + } + [keypath popKey]; + } + if (keypath.endOfKeypath) { + [keypath addSearchResultForCurrentPath:_wrapperLayer]; + } + [keypath popKey]; + } + [_contentsGroup searchNodesForKeypath:keypath]; +} + +- (void)setValueDelegate:(id _Nonnull)delegate + forKeypath:(LOTKeypath * _Nonnull)keypath { + if ([keypath pushKey:self.layerName]) { + // Matches self. + if ([keypath pushKey:@"Transform"]) { + // Is a transform node, check interpolators + LOTValueInterpolator *interpolator = _valueInterpolators[keypath.currentKey]; + if (interpolator) { + // We have a match! + [interpolator setValueDelegate:delegate]; + } + [keypath popKey]; + } + [keypath popKey]; + } + [_contentsGroup setValueDelegate:delegate forKeypath:keypath]; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.h b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.h new file mode 100644 index 0000000..f8be5c9 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.h @@ -0,0 +1,18 @@ +// +// LOTMaskContainer.h +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTMask.h" + +@interface LOTMaskContainer : CALayer + +- (instancetype _Nonnull)initWithMasks:(NSArray * _Nonnull)masks; + +@property (nonatomic, strong, nullable) NSNumber *currentFrame; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.m b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.m new file mode 100644 index 0000000..e14fd83 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.m @@ -0,0 +1,107 @@ +// +// LOTMaskContainer.m +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTMaskContainer.h" +#import "LOTPathInterpolator.h" +#import "LOTNumberInterpolator.h" + +@interface LOTMaskNodeLayer : CAShapeLayer + +@property (nonatomic, readonly) LOTMask *maskNode; + +- (instancetype)initWithMask:(LOTMask *)maskNode; +- (BOOL)hasUpdateForFrame:(NSNumber *)frame; + +@end + +@implementation LOTMaskNodeLayer { + LOTPathInterpolator *_pathInterpolator; + LOTNumberInterpolator *_opacityInterpolator; + LOTNumberInterpolator *_expansionInterpolator; +} + +- (instancetype)initWithMask:(LOTMask *)maskNode { + self = [super init]; + if (self) { + _pathInterpolator = [[LOTPathInterpolator alloc] initWithKeyframes:maskNode.maskPath.keyframes]; + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:maskNode.opacity.keyframes]; + _expansionInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:maskNode.expansion.keyframes]; + _maskNode = maskNode; + self.fillColor = [UIColor blueColor].CGColor; + } + return self; +} + +- (void)updateForFrame:(NSNumber *)frame withViewBounds:(CGRect)viewBounds { + if ([self hasUpdateForFrame:frame]) { + LOTBezierPath *path = [_pathInterpolator pathForFrame:frame cacheLengths:NO]; + + if (self.maskNode.maskMode == LOTMaskModeSubtract) { + CGMutablePathRef pathRef = CGPathCreateMutable(); + CGPathAddRect(pathRef, NULL, viewBounds); + CGPathAddPath(pathRef, NULL, path.CGPath); + self.path = pathRef; + self.fillRule = @"even-odd"; + CGPathRelease(pathRef); + } else { + self.path = path.CGPath; + } + + self.opacity = [_opacityInterpolator floatValueForFrame:frame]; + } +} + +- (BOOL)hasUpdateForFrame:(NSNumber *)frame { + return ([_pathInterpolator hasUpdateForFrame:frame] || + [_opacityInterpolator hasUpdateForFrame:frame]); +} + +@end + +@implementation LOTMaskContainer { + NSArray *_masks; +} + +- (instancetype)initWithMasks:(NSArray *)masks { + self = [super init]; + if (self) { + NSMutableArray *maskNodes = [NSMutableArray array]; + CALayer *containerLayer = [CALayer layer]; + + for (LOTMask *mask in masks) { + LOTMaskNodeLayer *node = [[LOTMaskNodeLayer alloc] initWithMask:mask]; + [maskNodes addObject:node]; + if (mask.maskMode == LOTMaskModeAdd || + mask == masks.firstObject) { + [containerLayer addSublayer:node]; + } else { + containerLayer.mask = node; + CALayer *newContainer = [CALayer layer]; + [newContainer addSublayer:containerLayer]; + containerLayer = newContainer; + } + } + [self addSublayer:containerLayer]; + _masks = maskNodes; + + } + return self; +} + +- (void)setCurrentFrame:(NSNumber *)currentFrame { + if (_currentFrame == currentFrame) { + return; + } + _currentFrame = currentFrame; + + for (LOTMaskNodeLayer *nodeLayer in _masks) { + [nodeLayer updateForFrame:currentFrame withViewBounds:self.bounds]; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTBezierData.h b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTBezierData.h new file mode 100644 index 0000000..132d100 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTBezierData.h @@ -0,0 +1,27 @@ +// +// LOTBezierData.h +// Lottie +// +// Created by brandon_withrow on 7/10/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTBezierData : NSObject + +- (instancetype)initWithData:(NSDictionary *)bezierData; + +@property (nonatomic, readonly) NSInteger count; +@property (nonatomic, readonly) BOOL closed; + +- (CGPoint)vertexAtIndex:(NSInteger)index; +- (CGPoint)inTangentAtIndex:(NSInteger)index; +- (CGPoint)outTangentAtIndex:(NSInteger)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTBezierData.m b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTBezierData.m new file mode 100644 index 0000000..b33e32b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTBezierData.m @@ -0,0 +1,100 @@ +// +// LOTBezierData.m +// Lottie +// +// Created by brandon_withrow on 7/10/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTBezierData.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTBezierData { + CGPoint *_vertices; + CGPoint *_inTangents; + CGPoint *_outTangents; +} + +- (instancetype)initWithData:(NSDictionary *)bezierData +{ + self = [super init]; + if (self) { + [self initializeData:bezierData]; + } + return self; +} + +- (void)dealloc { + free(_vertices); + free(_inTangents); + free(_outTangents); +} + +- (CGPoint)vertexAtIndex:(NSInteger)index { + NSAssert((index < _count && + index >= 0), + @"Lottie: Index out of bounds"); + return _vertices[index]; +} + +- (CGPoint)inTangentAtIndex:(NSInteger)index { + NSAssert((index < _count && + index >= 0), + @"Lottie: Index out of bounds"); + return _inTangents[index]; +} + +- (CGPoint)outTangentAtIndex:(NSInteger)index { + NSAssert((index < _count && + index >= 0), + @"Lottie: Index out of bounds"); + return _outTangents[index]; +} + +- (void)initializeData:(NSDictionary *)bezierData { + + NSArray *pointsArray = bezierData[@"v"]; + NSArray *inTangents = bezierData[@"i"]; + NSArray *outTangents = bezierData[@"o"]; + + if (pointsArray.count == 0) { + NSLog(@"%s: Warning: shape has no vertices", __PRETTY_FUNCTION__); + return ; + } + + NSAssert((pointsArray.count == inTangents.count && + pointsArray.count == outTangents.count), + @"Lottie: Incorrect number of points and tangents"); + _count = pointsArray.count; + _vertices = (CGPoint *)malloc(sizeof(CGPoint) * pointsArray.count); + _inTangents = (CGPoint *)malloc(sizeof(CGPoint) * pointsArray.count); + _outTangents = (CGPoint *)malloc(sizeof(CGPoint) * pointsArray.count); + if (bezierData[@"c"]) { + _closed = [bezierData[@"c"] boolValue]; + } + for (int i = 0; i < pointsArray.count; i ++) { + CGPoint vertex = [self _vertexAtIndex:i inArray:pointsArray]; + CGPoint outTan = LOT_PointAddedToPoint(vertex, [self _vertexAtIndex:i inArray:outTangents]); + CGPoint inTan = LOT_PointAddedToPoint(vertex, [self _vertexAtIndex:i inArray:inTangents]); + // BW BUG Straight Lines - Test Later + // Bake fix for lines here + _vertices[i] = vertex; + _inTangents[i] = inTan; + _outTangents[i] = outTan; + } +} + +- (CGPoint)_vertexAtIndex:(NSInteger)idx inArray:(NSArray *)points { + NSAssert((idx < points.count), + @"Lottie: Vertex Point out of bounds"); + + NSArray *pointArray = points[idx]; + + NSAssert((pointArray.count >= 2 && + [pointArray.firstObject isKindOfClass:[NSNumber class]]), + @"Lottie: Point Data Malformed"); + + return CGPointMake([(NSNumber *)pointArray[0] floatValue], [(NSNumber *)pointArray[1] floatValue]); +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h new file mode 100644 index 0000000..c2e3778 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h @@ -0,0 +1,49 @@ +// +// LOTKeyframe.h +// Pods +// +// Created by brandon_withrow on 7/10/17. +// +// + +#import +#import +#import "LOTPlatformCompat.h" +#import "LOTBezierData.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTKeyframe : NSObject + +- (instancetype)initWithKeyframe:(NSDictionary *)keyframe; +- (instancetype)initWithValue:(id)value; +- (void)remapValueWithBlock:(CGFloat (^)(CGFloat inValue))remapBlock; +- (LOTKeyframe *)copyWithData:(id)data; + +@property (nonatomic, readonly) NSNumber *keyframeTime; +@property (nonatomic, readonly) BOOL isHold; +@property (nonatomic, readonly) CGPoint inTangent; +@property (nonatomic, readonly) CGPoint outTangent; +@property (nonatomic, readonly) CGPoint spatialInTangent; +@property (nonatomic, readonly) CGPoint spatialOutTangent; + +@property (nonatomic, readonly) CGFloat floatValue; +@property (nonatomic, readonly) CGPoint pointValue; +@property (nonatomic, readonly) CGSize sizeValue; +@property (nonatomic, readonly) UIColor *colorValue; +@property (nonatomic, readonly, nullable) LOTBezierData *pathData; +@property (nonatomic, readonly) NSArray *arrayValue; + +@end + +@interface LOTKeyframeGroup : NSObject + +- (instancetype)initWithData:(id)data; + +- (void)remapKeyframesWithBlock:(CGFloat (^)(CGFloat inValue))remapBlock; + +@property (nonatomic, readonly) NSArray *keyframes; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m new file mode 100644 index 0000000..a77a073 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m @@ -0,0 +1,242 @@ +// +// LOTKeyframe.m +// Pods +// +// Created by brandon_withrow on 7/10/17. +// +// + +#import "LOTKeyframe.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTKeyframe + +- (instancetype)initWithKeyframe:(NSDictionary *)keyframe { + self = [super init]; + if (self) { + _keyframeTime = keyframe[@"t"]; + _inTangent = CGPointZero; + _outTangent = CGPointZero; + _spatialInTangent = CGPointZero; + _spatialOutTangent = CGPointZero; + NSDictionary *timingOutTangent = keyframe[@"o"]; + NSDictionary *timingInTangent = keyframe[@"i"]; + if (timingInTangent) { + _inTangent = [self _pointFromValueDict:timingInTangent]; + } + if (timingOutTangent) { + _outTangent = [self _pointFromValueDict:timingOutTangent]; + } + if ([keyframe[@"h"] boolValue]) { + _isHold = YES; + } + if (keyframe[@"to"]) { + NSArray *to = keyframe[@"to"]; + _spatialOutTangent = [self _pointFromValueArray:to]; + } + if (keyframe[@"ti"]) { + NSArray *ti = keyframe[@"ti"]; + _spatialInTangent = [self _pointFromValueArray:ti]; + } + id data = keyframe[@"s"]; + if (data) { + [self setupOutputWithData:data]; + } + } + return self; +} + +- (instancetype)initWithValue:(id)value { + self = [super init]; + if (self) { + _keyframeTime = @0; + _isHold = YES; + [self setupOutputWithData:value]; + } + return self; +} + +- (instancetype)initWithLOTKeyframe:(LOTKeyframe *)keyframe { + self = [super init]; + if (self) { + _keyframeTime = [keyframe.keyframeTime copy]; + _inTangent = keyframe.inTangent; + _outTangent = keyframe.outTangent; + _spatialInTangent = keyframe.spatialInTangent; + _spatialOutTangent = keyframe.spatialOutTangent; + _isHold = keyframe.isHold; + } + return self; +} + +- (LOTKeyframe *)copyWithData:(id)data { + LOTKeyframe *newFrame = [[LOTKeyframe alloc] initWithLOTKeyframe:self]; + [newFrame setData:data]; + return newFrame; +} + +- (void)setData:(id)data { + [self setupOutputWithData:data]; +} + +- (void)remapValueWithBlock:(CGFloat (^)(CGFloat inValue))remapBlock { + _floatValue = remapBlock(_floatValue); + _pointValue = CGPointMake(remapBlock(_pointValue.x), remapBlock(_pointValue.y)); + _sizeValue = CGSizeMake(remapBlock(_sizeValue.width), remapBlock(_sizeValue.height)); +} + +- (void)setupOutputWithData:(id)data { + if ([data isKindOfClass:[NSNumber class]]) { + _floatValue = [(NSNumber *)data floatValue]; + } + if ([data isKindOfClass:[NSArray class]] && + [[(NSArray *)data firstObject] isKindOfClass:[NSNumber class]]) { + NSArray *numberArray = (NSArray *)data; + if (numberArray.count > 0) { + _floatValue = [(NSNumber *)numberArray[0] floatValue]; + } + if (numberArray.count > 1) { + _pointValue = CGPointMake(_floatValue = [(NSNumber *)numberArray[0] floatValue], + _floatValue = [(NSNumber *)numberArray[1] floatValue]); + _sizeValue = CGSizeMake(_pointValue.x, _pointValue.y); + } + if (numberArray.count > 3) { + _colorValue = [self _colorValueFromArray:numberArray]; + } + _arrayValue = numberArray; + } else if ([data isKindOfClass:[NSArray class]] && + [[(NSArray *)data firstObject] isKindOfClass:[NSDictionary class]]) { + _pathData = [[LOTBezierData alloc] initWithData:[(NSArray *)data firstObject]]; + } else if ([data isKindOfClass:[NSDictionary class]]) { + _pathData = [[LOTBezierData alloc] initWithData:data]; + } +} + +- (CGPoint)_pointFromValueArray:(NSArray *)values { + CGPoint returnPoint = CGPointZero; + if (values.count > 1) { + returnPoint.x = [(NSNumber *)values[0] floatValue]; + returnPoint.y = [(NSNumber *)values[1] floatValue]; + } + return returnPoint; +} + +- (CGPoint)_pointFromValueDict:(NSDictionary *)values { + NSNumber *xValue = @0, *yValue = @0; + if ([values[@"x"] isKindOfClass:[NSNumber class]]) { + xValue = values[@"x"]; + } else if ([values[@"x"] isKindOfClass:[NSArray class]]) { + xValue = values[@"x"][0]; + } + + if ([values[@"y"] isKindOfClass:[NSNumber class]]) { + yValue = values[@"y"]; + } else if ([values[@"y"] isKindOfClass:[NSArray class]]) { + yValue = values[@"y"][0]; + } + + return CGPointMake([xValue floatValue], [yValue floatValue]); +} + +- (UIColor *)_colorValueFromArray:(NSArray *)colorArray { + if (colorArray.count == 4) { + BOOL shouldUse255 = NO; + for (NSNumber *number in colorArray) { + if (number.floatValue > 1) { + shouldUse255 = YES; + } + } + return [UIColor colorWithRed:colorArray[0].floatValue / (shouldUse255 ? 255.f : 1.f) + green:colorArray[1].floatValue / (shouldUse255 ? 255.f : 1.f) + blue:colorArray[2].floatValue / (shouldUse255 ? 255.f : 1.f) + alpha:colorArray[3].floatValue / (shouldUse255 ? 255.f : 1.f)]; + } + return nil; +} + +@end + +@implementation LOTKeyframeGroup + +- (instancetype)initWithData:(id)data { + self = [super init]; + if (self) { + if ([data isKindOfClass:[NSDictionary class]] && + [(NSDictionary *)data valueForKey:@"k"]) { + [self buildKeyframesFromData:[(NSDictionary *)data valueForKey:@"k"]]; + } else { + [self buildKeyframesFromData:data]; + } + } + return self; +} + +- (void)buildKeyframesFromData:(id)data { + if ([data isKindOfClass:[NSArray class]] && + [[(NSArray *)data firstObject] isKindOfClass:[NSDictionary class]] && + [(NSArray *)data firstObject][@"t"]) { + // Array of Keyframes + NSArray *keyframes = (NSArray *)data; + NSMutableArray *keys = [NSMutableArray array]; + NSDictionary *previousFrame = nil; + for (NSDictionary *keyframe in keyframes) { + NSMutableDictionary *currentFrame = [NSMutableDictionary dictionary]; + if (keyframe[@"t"]) { + // Set time + currentFrame[@"t"] = keyframe[@"t"]; + } + if (keyframe[@"s"]) { + // Set Value for Keyframe + currentFrame[@"s"] = keyframe[@"s"]; + } else if (previousFrame[@"e"]) { + // Set Value for Keyframe + currentFrame[@"s"] = previousFrame[@"e"]; + } + if (keyframe[@"o"]) { + // Set out tangent + currentFrame[@"o"] = keyframe[@"o"]; + } + if (previousFrame[@"i"]) { + currentFrame[@"i"] = previousFrame[@"i"]; + } + if (keyframe[@"to"]) { + // Set out tangent + currentFrame[@"to"] = keyframe[@"to"]; + } + if (previousFrame[@"ti"]) { + currentFrame[@"ti"] = previousFrame[@"ti"]; + } + if (keyframe[@"h"]) { + currentFrame[@"h"] = keyframe[@"h"]; + } + LOTKeyframe *key = [[LOTKeyframe alloc] initWithKeyframe:currentFrame]; + [keys addObject:key]; + previousFrame = keyframe; + } + _keyframes = keys; + + } else { + LOTKeyframe *key = [[LOTKeyframe alloc] initWithValue:data]; + _keyframes = @[key]; + } +} + +- (void)remapKeyframesWithBlock:(CGFloat (^)(CGFloat))remapBlock { + for (LOTKeyframe *keyframe in _keyframes) { + [keyframe remapValueWithBlock:remapBlock]; + } +} + +@end +/* + +KeyFrameObject has + + i (PointObject) // Timing curve in tangent + + o (PointObject) // Timing curve out tangent + + n (array of string) // String representation of timing curve + + t (integer) // Keyframe time for start of keyframe + + s (float or array of float or PathObject) // The key information + + e (float or array of float or PathObject) // The end key information + + to (array of float) // For spacial bezier path interpolation, the in tangent + + ti (array of float) // For spacial bezier path interpolation, the out tangent + + h (integer) // If the keyframe is a Hold keyframe or not +*/ diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h b/Pods/lottie-ios/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h new file mode 100644 index 0000000..f54bb8b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h @@ -0,0 +1,98 @@ + +#import "LOTPlatformCompat.h" + +#import + +// +// Core Graphics Geometry Additions +// + +extern const CGSize CGSizeMax; + +CGRect LOT_RectIntegral(CGRect rect); + +// Centering + +// Returns a rectangle of the given size, centered at a point +CGRect LOT_RectCenteredAtPoint(CGPoint center, CGSize size, BOOL integral); + +// Returns the center point of a CGRect +CGPoint LOT_RectGetCenterPoint(CGRect rect); + +// Insetting + +// Inset the rectangle on a single edge +CGRect LOT_RectInsetLeft(CGRect rect, CGFloat inset); +CGRect LOT_RectInsetRight(CGRect rect, CGFloat inset); +CGRect LOT_RectInsetTop(CGRect rect, CGFloat inset); +CGRect LOT_RectInsetBottom(CGRect rect, CGFloat inset); + +// Inset the rectangle on two edges +CGRect LOT_RectInsetHorizontal(CGRect rect, CGFloat leftInset, CGFloat rightInset); +CGRect LOT_RectInsetVertical(CGRect rect, CGFloat topInset, CGFloat bottomInset); + +// Inset the rectangle on all edges +CGRect LOT_RectInsetAll(CGRect rect, CGFloat leftInset, CGFloat rightInset, CGFloat topInset, CGFloat bottomInset); + +// Framing + +// Returns a rectangle of size framed in the center of the given rectangle +CGRect LOT_RectFramedCenteredInRect(CGRect rect, CGSize size, BOOL integral); + +// Returns a rectangle of size framed in the given rectangle and inset +CGRect LOT_RectFramedLeftInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral); +CGRect LOT_RectFramedRightInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral); +CGRect LOT_RectFramedTopInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral); +CGRect LOT_RectFramedBottomInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral); + +CGRect LOT_RectFramedTopLeftInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral); +CGRect LOT_RectFramedTopRightInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral); +CGRect LOT_RectFramedBottomLeftInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral); +CGRect LOT_RectFramedBottomRightInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral); + +// Divides a rect into sections and returns the section at specified index + +CGRect LOT_RectDividedSection(CGRect rect, NSInteger sections, NSInteger index, CGRectEdge fromEdge); + +// Returns a rectangle of size attached to the given rectangle +CGRect LOT_RectAttachedLeftToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral); +CGRect LOT_RectAttachedRightToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral); +CGRect LOT_RectAttachedTopToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral); +CGRect LOT_RectAttachedBottomToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral); + +CGRect LOT_RectAttachedBottomLeftToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral); +CGRect LOT_RectAttachedBottomRightToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral); +CGRect LOT_RectAttachedTopRightToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral); +CGRect LOT_RectAttachedTopLeftToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral); + +BOOL LOT_CGPointIsZero(CGPoint point); + +// Combining +// Adds all values of the 2nd rect to the first rect +CGRect LOT_RectAddRect(CGRect rect, CGRect other); +CGRect LOT_RectAddPoint(CGRect rect, CGPoint point); +CGRect LOT_RectAddSize(CGRect rect, CGSize size); +CGRect LOT_RectBounded(CGRect rect); + +CGPoint LOT_PointAddedToPoint(CGPoint point1, CGPoint point2); + +CGRect LOT_RectSetHeight(CGRect rect, CGFloat height); + +CGFloat LOT_PointDistanceFromPoint(CGPoint point1, CGPoint point2); +CGFloat LOT_DegreesToRadians(CGFloat degrees); + +CGFloat LOT_RemapValue(CGFloat value, CGFloat low1, CGFloat high1, CGFloat low2, CGFloat high2 ); +CGPoint LOT_PointByLerpingPoints(CGPoint point1, CGPoint point2, CGFloat value); + +CGPoint LOT_PointInLine(CGPoint A, CGPoint B, CGFloat T); +CGPoint LOT_PointInCubicCurve(CGPoint start, CGPoint cp1, CGPoint cp2, CGPoint end, CGFloat T); + +CGFloat LOT_CubicBezierInterpolate(CGPoint P0, CGPoint P1, CGPoint P2, CGPoint P3, CGFloat x); +CGFloat LOT_SolveCubic(CGFloat a, CGFloat b, CGFloat c, CGFloat d); +CGFloat LOT_SolveQuadratic(CGFloat a, CGFloat b, CGFloat c); +CGFloat LOT_Squared(CGFloat f); +CGFloat LOT_Cubed(CGFloat f); +CGFloat LOT_CubicRoot(CGFloat f); + +CGFloat LOT_CubicLength(CGPoint fromPoint, CGPoint toPoint, CGPoint controlPoint1, CGPoint controlPoint2); +CGFloat LOT_CubicLengthWithPrecision(CGPoint fromPoint, CGPoint toPoint, CGPoint controlPoint1, CGPoint controlPoint2, CGFloat iterations); diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m b/Pods/lottie-ios/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m new file mode 100644 index 0000000..4027e41 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m @@ -0,0 +1,480 @@ + +#import "CGGeometry+LOTAdditions.h" + +const CGSize CGSizeMax = {CGFLOAT_MAX, CGFLOAT_MAX}; +// +// Core Graphics Geometry Additions +// + +// CGRectIntegral returns a rectangle with the smallest integer values for its origin and size that contains the source rectangle. +// For a rect with .origin={5, 5.5}, .size=(10, 10), it will return .origin={5,5}, .size={10, 11}; +// LOT_RectIntegral will return {5,5}, {10, 10}. +CGRect LOT_RectIntegral(CGRect rect) { + rect.origin = CGPointMake(rintf(rect.origin.x), rintf(rect.origin.y)); + rect.size = CGSizeMake(ceilf(rect.size.width), ceil(rect.size.height)); + return rect; +} + +// +// Centering + +// Returns a rectangle of the given size, centered at a point + +CGRect LOT_RectCenteredAtPoint(CGPoint center, CGSize size, BOOL integral) { + CGRect result; + result.origin.x = center.x - 0.5f * size.width; + result.origin.y = center.y - 0.5f * size.height; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +// Returns the center point of a CGRect +CGPoint LOT_RectGetCenterPoint(CGRect rect) { + return CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); +} + +// +// Insetting + +// Inset the rectangle on a single edge + +CGRect LOT_RectInsetLeft(CGRect rect, CGFloat inset) { + rect.origin.x += inset; + rect.size.width -= inset; + return rect; +} + +CGRect LOT_RectInsetRight(CGRect rect, CGFloat inset) { + rect.size.width -= inset; + return rect; +} + +CGRect LOT_RectInsetTop(CGRect rect, CGFloat inset) { + rect.origin.y += inset; + rect.size.height -= inset; + return rect; +} + +CGRect LOT_RectInsetBottom(CGRect rect, CGFloat inset) { + rect.size.height -= inset; + return rect; +} + +// Inset the rectangle on two edges + +CGRect LOT_RectInsetHorizontal(CGRect rect, CGFloat leftInset, CGFloat rightInset) { + rect.origin.x += leftInset; + rect.size.width -= (leftInset + rightInset); + return rect; +} + +CGRect LOT_RectInsetVertical(CGRect rect, CGFloat topInset, CGFloat bottomInset) { + rect.origin.y += topInset; + rect.size.height -= (topInset + bottomInset); + return rect; +} + +// Inset the rectangle on all edges + +CGRect LOT_RectInsetAll(CGRect rect, CGFloat leftInset, CGFloat rightInset, CGFloat topInset, CGFloat bottomInset) { + rect.origin.x += leftInset; + rect.origin.y += topInset; + rect.size.width -= (leftInset + rightInset); + rect.size.height -= (topInset + bottomInset); + return rect; +} + +// +// Framing + +// Returns a rectangle of size framed in the center of the given rectangle + +CGRect LOT_RectFramedCenteredInRect(CGRect rect, CGSize size, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rintf(0.5f * (rect.size.width - size.width)); + result.origin.y = rect.origin.y + rintf(0.5f * (rect.size.height - size.height)); + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +// Returns a rectangle of size framed in the given rectangle and inset + +CGRect LOT_RectFramedLeftInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + inset; + result.origin.y = rect.origin.y + rintf(0.5f * (rect.size.height - size.height)); + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectFramedRightInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rect.size.width - size.width - inset; + result.origin.y = rect.origin.y + rintf(0.5f * (rect.size.height - size.height)); + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectFramedTopInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rintf(0.5f * (rect.size.width - size.width)); + result.origin.y = rect.origin.y + inset; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectFramedBottomInRect(CGRect rect, CGSize size, CGFloat inset, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rintf(0.5f * (rect.size.width - size.width)); + result.origin.y = rect.origin.y + rect.size.height - size.height - inset; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectFramedTopLeftInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + insetWidth; + result.origin.y = rect.origin.y + insetHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectFramedTopRightInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rect.size.width - size.width - insetWidth; + result.origin.y = rect.origin.y + insetHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectFramedBottomLeftInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + insetWidth; + result.origin.y = rect.origin.y + rect.size.height - size.height - insetHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectFramedBottomRightInRect(CGRect rect, CGSize size, CGFloat insetWidth, CGFloat insetHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rect.size.width - size.width - insetWidth; + result.origin.y = rect.origin.y + rect.size.height - size.height - insetHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +// Returns a rectangle of size attached to the given rectangle + +CGRect LOT_RectAttachedLeftToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x - size.width - margin; + result.origin.y = rect.origin.y + rintf(0.5f * (rect.size.height - size.height)); + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectAttachedRightToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rect.size.width + margin; + result.origin.y = rect.origin.y + rintf(0.5f * (rect.size.height - size.height)); + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectAttachedTopToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rintf(0.5f * (rect.size.width - size.width)); + result.origin.y = rect.origin.y - size.height - margin; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectAttachedTopLeftToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + marginWidth; + result.origin.y = rect.origin.y - size.height - marginHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectAttachedTopRightToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rect.size.width - size.width - marginWidth; + result.origin.y = rect.origin.y - rect.size.height - marginHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectAttachedBottomToRect(CGRect rect, CGSize size, CGFloat margin, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rintf(0.5f * (rect.size.width - size.width)); + result.origin.y = rect.origin.y + rect.size.height + margin; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectAttachedBottomLeftToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + marginWidth; + result.origin.y = rect.origin.y + rect.size.height + marginHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +CGRect LOT_RectAttachedBottomRightToRect(CGRect rect, CGSize size, CGFloat marginWidth, CGFloat marginHeight, BOOL integral) { + CGRect result; + result.origin.x = rect.origin.x + rect.size.width - size.width - marginWidth; + result.origin.y = rect.origin.y + rect.size.height + marginHeight; + result.size = size; + + if (integral) { result = LOT_RectIntegral(result); } + return result; +} + +// Divides a rect into sections and returns the section at specified index + +CGRect LOT_RectDividedSection(CGRect rect, NSInteger sections, NSInteger index, CGRectEdge fromEdge) { + if (sections == 0) { + return CGRectZero; + } + CGRect r = rect; + if (fromEdge == CGRectMaxXEdge || fromEdge == CGRectMinXEdge) { + r.size.width = rect.size.width / sections; + r.origin.x += r.size.width * index; + } else { + r.size.height = rect.size.height / sections; + r.origin.y += r.size.height * index; + } + return r; +} + + +CGRect LOT_RectAddRect(CGRect rect, CGRect other) { + return CGRectMake(rect.origin.x + other.origin.x, rect.origin.y + other.origin.y, + rect.size.width + other.size.width, rect.size.height + other.size.height); +} + +CGRect LOT_RectAddPoint(CGRect rect, CGPoint point) { + return CGRectMake(rect.origin.x + point.x, rect.origin.y + point.y, + rect.size.width, rect.size.height); +} + +CGRect LOT_RectAddSize(CGRect rect, CGSize size) { + return CGRectMake(rect.origin.x, rect.origin.y, + rect.size.width + size.width, rect.size.height + size.height); +} + +CGRect LOT_RectBounded(CGRect rect) { + CGRect returnRect = rect; + returnRect.origin = CGPointZero; + return returnRect; +} + +CGPoint LOT_PointAddedToPoint(CGPoint point1, CGPoint point2) { + CGPoint returnPoint = point1; + returnPoint.x += point2.x; + returnPoint.y += point2.y; + return returnPoint; +} + +CGRect LOT_RectSetHeight(CGRect rect, CGFloat height) { + return CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, height); +} + +CGFloat LOT_DegreesToRadians(CGFloat degrees) { + return degrees * M_PI / 180; +} + +CGFloat LOT_PointDistanceFromPoint(CGPoint point1, CGPoint point2) { + CGFloat xDist = (point2.x - point1.x); + CGFloat yDist = (point2.y - point1.y); + CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist)); + return distance; +} + +CGFloat LOT_RemapValue(CGFloat value, CGFloat low1, CGFloat high1, CGFloat low2, CGFloat high2 ) { + return low2 + (value - low1) * (high2 - low2) / (high1 - low1); +} + +CGPoint LOT_PointByLerpingPoints(CGPoint point1, CGPoint point2, CGFloat value) { + CGFloat xDiff = point2.x - point1.x; + CGFloat yDiff = point2.y - point1.y; + CGPoint transposed = CGPointMake(fabs(xDiff), fabs(yDiff)); + CGPoint returnPoint; + if (xDiff == 0 || yDiff == 0) { + returnPoint.x = xDiff == 0 ? point1.x : LOT_RemapValue(value, 0, 1, point1.x, point2.x); + returnPoint.y = yDiff == 0 ? point1.y : LOT_RemapValue(value, 0, 1, point1.y, point2.y); + } else { + CGFloat rx = transposed.x / transposed.y; + CGFloat yLerp = LOT_RemapValue(value, 0, 1, 0, transposed.y); + CGFloat xLerp = yLerp * rx; + CGPoint interpolatedPoint = CGPointMake(point2.x < point1.x ? xLerp * -1 : xLerp, + point2.y < point1.y ? yLerp * -1 : yLerp); + returnPoint = LOT_PointAddedToPoint(point1, interpolatedPoint); + } + return returnPoint; +} + +CGPoint LOT_PointInLine(CGPoint A, CGPoint B, CGFloat T) { + CGPoint C; + C.x = A.x - ((A.x - B.x) * T); + C.y = A.y - ((A.y - B.y) * T); + return C; +} + +CGFloat LOT_CubicBezierGetY(CGPoint cp1, CGPoint cp2, CGFloat T) { +// (1-x)^3 * y0 + 3*(1-x)^2 * x * y1 + 3*(1-x) * x^2 * y2 + x^3 * y3 + return 3 * powf(1.f - T, 2.f) * T * cp1.y + 3.f * (1.f - T) * powf(T, 2.f) * cp2.y + powf(T, 3.f); +} + +CGPoint LOT_PointInCubicCurve(CGPoint start, CGPoint cp1, CGPoint cp2, CGPoint end, CGFloat T) { + CGPoint A = LOT_PointInLine(start, cp1, T); + CGPoint B = LOT_PointInLine(cp1, cp2, T); + CGPoint C = LOT_PointInLine(cp2, end, T); + CGPoint D = LOT_PointInLine(A, B, T); + CGPoint E = LOT_PointInLine(B, C, T); + CGPoint F = LOT_PointInLine(D, E, T); + return F; +} + +CGFloat LOT_SolveCubic(CGFloat a, CGFloat b, CGFloat c, CGFloat d) { + if (a == 0) return LOT_SolveQuadratic(b, c, d); + if (d == 0) return 0; + + b /= a; + c /= a; + d /= a; + CGFloat q = (3.0 * c - LOT_Squared(b)) / 9.0; + CGFloat r = (-27.0 * d + b * (9.0 * c - 2.0 * LOT_Squared(b))) / 54.0; + CGFloat disc = LOT_Cubed(q) + LOT_Squared(r); + CGFloat term1 = b / 3.0; + + if (disc > 0) { + double s = r + sqrtf(disc); + s = (s < 0) ? - LOT_CubicRoot(-s) : LOT_CubicRoot(s); + double t = r - sqrtf(disc); + t = (t < 0) ? - LOT_CubicRoot(-t) : LOT_CubicRoot(t); + + double result = -term1 + s + t; + if (result >= 0 && result <= 1) return result; + } else if (disc == 0) { + double r13 = (r < 0) ? - LOT_CubicRoot(-r) : LOT_CubicRoot(r); + + double result = -term1 + 2.0 * r13; + if (result >= 0 && result <= 1) return result; + + result = -(r13 + term1); + if (result >= 0 && result <= 1) return result; + } else { + q = -q; + double dum1 = q * q * q; + dum1 = acosf(r / sqrtf(dum1)); + double r13 = 2.0 * sqrtf(q); + + double result = -term1 + r13 * cos(dum1 / 3.0); + if (result >= 0 && result <= 1) return result; + + result = -term1 + r13 * cos((dum1 + 2.0 * M_PI) / 3.0); + if (result >= 0 && result <= 1) return result; + + result = -term1 + r13 * cos((dum1 + 4.0 * M_PI) / 3.0); + if (result >= 0 && result <= 1) return result; + } + + return -1; +} + +CGFloat LOT_SolveQuadratic(CGFloat a, CGFloat b, CGFloat c) { + CGFloat result = (-b + sqrtf(LOT_Squared(b) - 4 * a * c)) / (2 * a); + if (result >= 0 && result <= 1) return result; + + result = (-b - sqrtf(LOT_Squared(b) - 4 * a * c)) / (2 * a); + if (result >= 0 && result <= 1) return result; + + return -1; +} + +CGFloat LOT_Squared(CGFloat f) { return f * f; } + +CGFloat LOT_Cubed(CGFloat f) { return f * f * f; } + +CGFloat LOT_CubicRoot(CGFloat f) { return powf(f, 1.0 / 3.0); } + +CGFloat LOT_CubicBezierInterpolate(CGPoint P0, CGPoint P1, CGPoint P2, CGPoint P3, CGFloat x) { + CGFloat t; + if (x == P0.x) { + // Handle corner cases explicitly to prevent rounding errors + t = 0; + } else if (x == P3.x) { + t = 1; + } else { + // Calculate t + CGFloat a = -P0.x + 3 * P1.x - 3 * P2.x + P3.x; + CGFloat b = 3 * P0.x - 6 * P1.x + 3 * P2.x; + CGFloat c = -3 * P0.x + 3 * P1.x; + CGFloat d = P0.x - x; + CGFloat tTemp = LOT_SolveCubic(a, b, c, d); + if (tTemp == -1) return -1; + t = tTemp; + } + + // Calculate y from t + return LOT_Cubed(1 - t) * P0.y + 3 * t * LOT_Squared(1 - t) * P1.y + 3 * LOT_Squared(t) * (1 - t) * P2.y + LOT_Cubed(t) * P3.y; +} + +CGFloat LOT_CubicLengthWithPrecision(CGPoint fromPoint, CGPoint toPoint, CGPoint controlPoint1, CGPoint controlPoint2, CGFloat iterations) { + CGFloat length = 0; + CGPoint previousPoint = fromPoint; + iterations = ceilf(iterations); + for (int i = 1; i <= iterations; ++i) { + float s = (float)i / iterations; + + CGPoint p = LOT_PointInCubicCurve(fromPoint, controlPoint1, controlPoint2, toPoint, s); + + length += LOT_PointDistanceFromPoint(previousPoint, p); + previousPoint = p; + } + return length; +} + +CGFloat LOT_CubicLength(CGPoint fromPoint, CGPoint toPoint, CGPoint controlPoint1, CGPoint controlPoint2) { + return LOT_CubicLengthWithPrecision(fromPoint, toPoint, controlPoint1, controlPoint2, 20); +} + +BOOL LOT_CGPointIsZero(CGPoint point) { + return CGPointEqualToPoint(point, CGPointZero); +} diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTBezierPath.h b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTBezierPath.h new file mode 100644 index 0000000..5c90b5b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTBezierPath.h @@ -0,0 +1,54 @@ +// +// LOTBezierPath.h +// Lottie +// +// Created by brandon_withrow on 7/20/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPlatformCompat.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTBezierPath : NSObject + ++ (instancetype)pathWithCGPath:(CGPathRef)path; + ++ (instancetype)newPath; + +- (void)LOT_moveToPoint:(CGPoint)point; + +- (void)LOT_addLineToPoint:(CGPoint)point; + +- (void)LOT_addCurveToPoint:(CGPoint)point + controlPoint1:(CGPoint)cp1 + controlPoint2:(CGPoint)cp2; + +- (void)LOT_closePath; + +- (void)LOT_removeAllPoints; + +- (void)LOT_appendPath:(LOTBezierPath *)bezierPath; + +- (void)trimPathFromT:(CGFloat)fromT toT:(CGFloat)toT offset:(CGFloat)offset; + +- (void)LOT_applyTransform:(CGAffineTransform)transform; + +@property (nonatomic, assign) BOOL cacheLengths; + +@property (nonatomic, readonly) CGFloat length; + +@property (nonatomic, readonly) CGPathRef CGPath; +@property (nonatomic, readonly) CGPoint currentPoint; +@property (nonatomic) CGFloat lineWidth; +@property (nonatomic) CGLineCap lineCapStyle; +@property (nonatomic) CGLineJoin lineJoinStyle; +@property (nonatomic) CGFloat miterLimit; +@property (nonatomic) CGFloat flatness; +@property (nonatomic) BOOL usesEvenOddFillRule; +@property (readonly, getter=isEmpty) BOOL empty; +@property (nonatomic, readonly) CGRect bounds; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTBezierPath.m b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTBezierPath.m new file mode 100644 index 0000000..499e712 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTBezierPath.m @@ -0,0 +1,471 @@ +// +// LOTBezierPath.m +// Lottie +// +// Created by brandon_withrow on 7/20/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTBezierPath.h" +#import "CGGeometry+LOTAdditions.h" + +typedef struct LOT_Subpath LOT_Subpath; +typedef void(^LOTBezierPathEnumerationHandler)(const CGPathElement *element); + +struct LOT_Subpath { + CGPathElementType type; + CGFloat length; + CGPoint endPoint; + CGPoint controlPoint1; + CGPoint controlPoint2; + LOT_Subpath *nextSubpath; +}; + +@interface LOTBezierPath () +@property (nonatomic, readonly) LOT_Subpath *headSubpath; +@end + +@implementation LOTBezierPath { + LOT_Subpath *headSubpath_; + LOT_Subpath *tailSubpath_; + CGPoint subpathStartPoint_; + CGFloat *_lineDashPattern; + NSInteger _lineDashCount; + CGFloat _lineDashPhase; + CGMutablePathRef _path; +} + +// MARK - Lifecycle + ++ (instancetype)pathWithCGPath:(CGPathRef)path { + LOTBezierPath *returnPath = [LOTBezierPath newPath]; + [returnPath setWithCGPath:path]; + return returnPath; +} + ++ (instancetype)newPath { + return [[LOTBezierPath alloc] init]; +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + _length = 0; + headSubpath_ = NULL; + tailSubpath_ = NULL; + _path = CGPathCreateMutable(); + _lineWidth = 1; + _lineCapStyle = kCGLineCapButt; + _lineJoinStyle = kCGLineJoinMiter; + _miterLimit = 10; + _flatness = 0.6; + _usesEvenOddFillRule = NO; + _lineDashPattern = NULL; + _lineDashCount = 0; + _lineDashPhase = 0; + _cacheLengths = NO; + } + return self; +} + +- (void)dealloc { + [self removeAllSubpaths]; + if (_path) CGPathRelease(_path); +} + +- (id)copyWithZone:(NSZone *)zone { + LOTBezierPath *copy = [[self class] new]; + + copy.cacheLengths = self.cacheLengths; + copy.lineWidth = self.lineWidth; + copy.lineCapStyle = self.lineCapStyle; + copy.lineJoinStyle = self.lineJoinStyle; + copy.miterLimit = self.miterLimit; + copy.flatness = self.flatness; + copy.usesEvenOddFillRule = self.usesEvenOddFillRule; + + [copy LOT_appendPath:self]; + + return copy; +} + +// MARK - Subpaths List + +- (void)removeAllSubpaths { + LOT_Subpath *node = headSubpath_; + while (node) { + LOT_Subpath *nextNode = node->nextSubpath; + node->nextSubpath = NULL; + free(node); + node = nextNode; + } + headSubpath_ = NULL; + tailSubpath_ = NULL; +} + +- (void)addSubpathWithType:(CGPathElementType)type + length:(CGFloat)length + endPoint:(CGPoint)endPoint + controlPoint1:(CGPoint)controlPoint1 + controlPoint1:(CGPoint)controlPoint2 { + LOT_Subpath *subPath = (LOT_Subpath *)malloc(sizeof(LOT_Subpath)); + subPath->type = type; + subPath->length = length; + subPath->endPoint = endPoint; + subPath->controlPoint1 = controlPoint1; + subPath->controlPoint2 = controlPoint2; + subPath->nextSubpath = NULL; + if (tailSubpath_ == NULL) { + headSubpath_ = subPath; + tailSubpath_ = subPath; + } else { + tailSubpath_->nextSubpath = subPath; + tailSubpath_ = subPath; + } +} + +// MARK Getters Setters + +- (CGPoint)currentPoint { + CGPoint previousPoint = tailSubpath_ ? tailSubpath_->endPoint : CGPointZero; + return previousPoint; +} + +- (CGPathRef)CGPath { + return _path; +} + +- (LOT_Subpath *)headSubpath { + return headSubpath_; +} + +// MARK - External + +- (void)LOT_moveToPoint:(CGPoint)point { + subpathStartPoint_ = point; + [self addSubpathWithType:kCGPathElementMoveToPoint length:0 endPoint:point controlPoint1:CGPointZero controlPoint1:CGPointZero]; + CGPathMoveToPoint(_path, NULL, point.x, point.y); +} + +- (void)LOT_addLineToPoint:(CGPoint)point { + CGFloat length = 0; + if (_cacheLengths) { + length = LOT_PointDistanceFromPoint(self.currentPoint, point); + _length = _length + length; + } + [self addSubpathWithType:kCGPathElementAddLineToPoint length:length endPoint:point controlPoint1:CGPointZero controlPoint1:CGPointZero]; + CGPathAddLineToPoint(_path, NULL, point.x, point.y); +} + +- (void)LOT_addCurveToPoint:(CGPoint)point + controlPoint1:(CGPoint)cp1 + controlPoint2:(CGPoint)cp2 { + CGFloat length = 0; + if (_cacheLengths) { + length = LOT_CubicLengthWithPrecision(self.currentPoint, point, cp1, cp2, 5); + _length = _length + length; + } + [self addSubpathWithType:kCGPathElementAddCurveToPoint length:length endPoint:point controlPoint1:cp1 controlPoint1:cp2]; + CGPathAddCurveToPoint(_path, NULL, cp1.x, cp1.y, cp2.x, cp2.y, point.x, point.y); +} + +- (void)LOT_closePath { + CGFloat length = 0; + if (_cacheLengths) { + length = LOT_PointDistanceFromPoint(self.currentPoint, subpathStartPoint_); + _length = _length + length; + } + [self addSubpathWithType:kCGPathElementCloseSubpath length:length endPoint:subpathStartPoint_ controlPoint1:CGPointZero controlPoint1:CGPointZero]; + CGPathCloseSubpath(_path); +} + +- (void)_clearPathData { + _length = 0; + subpathStartPoint_ = CGPointZero; + CGPathRelease(_path); + _path = CGPathCreateMutable(); +} + +- (void)LOT_removeAllPoints { + [self removeAllSubpaths]; + [self _clearPathData]; +} + +- (BOOL)containsPoint:(CGPoint)point { + return CGPathContainsPoint(_path, NULL, point, _usesEvenOddFillRule); +} + +- (BOOL)isEmpty { + return CGPathIsEmpty(_path); +} + +- (CGRect)bounds { + return CGPathGetBoundingBox(_path); +} + +- (void)LOT_applyTransform:(CGAffineTransform)transform { + CGMutablePathRef mutablePath = CGPathCreateMutable(); + CGPathAddPath(mutablePath, &transform, _path); + CGPathRelease(_path); + _path = mutablePath; +} + +- (void)LOT_appendPath:(LOTBezierPath *)bezierPath { + CGPathAddPath(_path, NULL, bezierPath.CGPath); + + LOT_Subpath *nextSubpath = bezierPath.headSubpath; + while (nextSubpath) { + CGFloat length = 0; + if (self.cacheLengths) { + if (bezierPath.cacheLengths) { + length = nextSubpath->length; + } else { + // No previous length data, measure. + if (nextSubpath->type == kCGPathElementAddLineToPoint) { + length = LOT_PointDistanceFromPoint(self.currentPoint, nextSubpath->endPoint); + } else if (nextSubpath->type == kCGPathElementAddCurveToPoint) { + length = LOT_CubicLengthWithPrecision(self.currentPoint, nextSubpath->endPoint, nextSubpath->controlPoint1, nextSubpath->controlPoint2, 5); + } else if (nextSubpath->type == kCGPathElementCloseSubpath) { + length = LOT_PointDistanceFromPoint(self.currentPoint, nextSubpath->endPoint); + } + } + } + _length = _length + length; + [self addSubpathWithType:nextSubpath->type + length:length + endPoint:nextSubpath->endPoint + controlPoint1:nextSubpath->controlPoint1 + controlPoint1:nextSubpath->controlPoint2]; + + nextSubpath = nextSubpath->nextSubpath; + } +} + +- (void)trimPathFromT:(CGFloat)fromT toT:(CGFloat)toT offset:(CGFloat)offset { + fromT = MIN(MAX(0, fromT), 1); + toT = MIN(MAX(0, toT), 1); + if (fromT > toT) { + CGFloat to = fromT; + fromT = toT; + toT = to; + } + + offset = offset - floor(offset); + CGFloat fromLength = fromT + offset; + CGFloat toLength = toT + offset; + + if (toT - fromT == 1) { + // Do Nothing, Full Path returned. + return; + } + + if (fromLength == toLength) { + // Empty Path + [self LOT_removeAllPoints]; + return; + } + + if (fromLength >= 1) { + fromLength = fromLength - floor(fromLength); + } + if (toLength > 1) { + toLength = toLength - floor(toLength); + } + + if (fromLength == 0 && + toLength == 1) { + // Do Nothing. Full Path returned. + return; + } + + if (fromLength == toLength) { + // Empty Path + [self LOT_removeAllPoints]; + return; + } + + CGFloat totalLength = _length; + + [self _clearPathData]; + + LOT_Subpath *subpath = headSubpath_; + headSubpath_ = NULL; + tailSubpath_ = NULL; + + fromLength = fromLength * totalLength; + toLength = toLength * totalLength; + + CGFloat currentStartLength = fromLength < toLength ? fromLength : 0; + CGFloat currentEndLength = toLength; + + CGFloat subpathBeginningLength = 0; + CGPoint currentPoint = CGPointZero; + + while (subpath) { + + CGFloat pathLength = subpath->length; + if (!_cacheLengths) { + if (subpath->type == kCGPathElementAddLineToPoint) { + pathLength = LOT_PointDistanceFromPoint(currentPoint, subpath->endPoint); + } else if (subpath->type == kCGPathElementAddCurveToPoint) { + pathLength = LOT_CubicLengthWithPrecision(currentPoint, subpath->endPoint, subpath->controlPoint1, subpath->controlPoint2, 5); + } else if (subpath->type == kCGPathElementCloseSubpath) { + pathLength = LOT_PointDistanceFromPoint(currentPoint, subpath->endPoint); + } + } + CGFloat subpathEndLength = subpathBeginningLength + pathLength; + + if (subpath->type != kCGPathElementMoveToPoint && + subpathEndLength > currentStartLength) { + // The end of this path overlaps the current drawing region + + // x x x x + // ---------------ooooooooooooooooooooooooooooooooooooooooooooooooo------------------- + // Start |currentStartLength currentEndLength| End + + CGFloat currentSpanStartT = LOT_RemapValue(currentStartLength, subpathBeginningLength, subpathEndLength, 0, 1); + CGFloat currentSpanEndT = LOT_RemapValue(currentEndLength, subpathBeginningLength, subpathEndLength, 0, 1); + + // At this point currentSpan start and end T can be less than 0 or greater than 1 + + if (subpath->type == kCGPathElementAddLineToPoint) { + + if (currentSpanStartT >= 0) { + // The current drawable span either starts with this subpath or along this subpath. + // If this is the middle of a segment then currentSpanStartT would be less than 0 + if (currentSpanStartT > 0) { + currentPoint = LOT_PointInLine(currentPoint, subpath->endPoint, currentSpanStartT); + } + [self LOT_moveToPoint:currentPoint]; + // Now we are ready to draw a line + } + + CGPoint toPoint = subpath->endPoint; + if (currentSpanEndT < 1) { + // The end of the span is inside of the current subpath. Find it. + toPoint = LOT_PointInLine(currentPoint, subpath->endPoint, currentSpanEndT); + } + [self LOT_addLineToPoint:toPoint]; + currentPoint = toPoint; + } else if (subpath->type == kCGPathElementAddCurveToPoint) { + + CGPoint cp1, cp2, end; + cp1 = subpath->controlPoint1; + cp2 = subpath->controlPoint2; + end = subpath->endPoint; + + if (currentSpanStartT >= 0) { + // The current drawable span either starts with this subpath or along this subpath. + // If this is the middle of a segment then currentSpanStartT would be less than 0 + // Beginning of a segment Move start point and calculate cp1 and 2 is necessary + if (currentSpanStartT > 0) { + CGPoint A = LOT_PointInLine(currentPoint, cp1, currentSpanStartT); + CGPoint B = LOT_PointInLine(cp1, cp2, currentSpanStartT); + CGPoint C = LOT_PointInLine(cp2, end, currentSpanStartT); + CGPoint D = LOT_PointInLine(A, B, currentSpanStartT); + CGPoint E = LOT_PointInLine(B, C, currentSpanStartT); + CGPoint F = LOT_PointInLine(D, E, currentSpanStartT); + currentPoint = F; + cp1 = E; + cp2 = C; + currentSpanEndT = LOT_RemapValue(currentSpanEndT, currentSpanStartT, 1, 0, 1); + } + [self LOT_moveToPoint:currentPoint]; + } + + if (currentSpanEndT < 1) { + CGPoint A = LOT_PointInLine(currentPoint, cp1, currentSpanEndT); + CGPoint B = LOT_PointInLine(cp1, cp2, currentSpanEndT); + CGPoint C = LOT_PointInLine(cp2, end, currentSpanEndT); + CGPoint D = LOT_PointInLine(A, B, currentSpanEndT); + CGPoint E = LOT_PointInLine(B, C, currentSpanEndT); + CGPoint F = LOT_PointInLine(D, E, currentSpanEndT); + cp1 = A; + cp2 = D; + end = F; + } + [self LOT_addCurveToPoint:end controlPoint1:cp1 controlPoint2:cp2]; + } + + if (currentSpanEndT <= 1) { + // We have possibly reached the end. + // Current From and To will possibly need to be reset. + if (fromLength < toLength) { + while (subpath) { + LOT_Subpath *nextNode = subpath->nextSubpath; + subpath->nextSubpath = NULL; + free(subpath); + subpath = nextNode; + } + break; + } else { + currentStartLength = fromLength; + currentEndLength = totalLength; + if (fromLength < (subpathBeginningLength + pathLength) && + fromLength > subpathBeginningLength && + currentSpanEndT < 1) { + // Loop over this subpath one more time. + // In this case the path start and end trim fall within this subpath bounds + continue; + } + } + } + } + currentPoint = subpath->endPoint; + subpathBeginningLength = subpathEndLength; + + LOT_Subpath *nextNode = subpath->nextSubpath; + subpath->nextSubpath = NULL; + free(subpath); + subpath = nextNode; + } +} + +#pragma mark - From CGPath + +- (void)setWithCGPath:(CGPathRef)path { + [self lot_enumeratePath:path elementsUsingBlock:^(const CGPathElement *element) { + switch (element->type) { + case kCGPathElementMoveToPoint: { + CGPoint point = element ->points[0]; + [self LOT_moveToPoint:point]; + break; + } + case kCGPathElementAddLineToPoint: { + CGPoint point = element ->points[0]; + [self LOT_addLineToPoint:point]; + break; + } + case kCGPathElementAddQuadCurveToPoint: { + break; + } + case kCGPathElementAddCurveToPoint: { + CGPoint point1 = element->points[0]; + CGPoint point2 = element->points[1]; + CGPoint point3 = element->points[2]; + [self LOT_addCurveToPoint:point3 controlPoint1:point1 controlPoint2:point2]; + break; + } + case kCGPathElementCloseSubpath: { + [self LOT_closePath]; + break; + } + } + }]; +} + +- (void)lot_enumeratePath:(CGPathRef)cgPath elementsUsingBlock:(LOTBezierPathEnumerationHandler)handler { + void CGPathEnumerationCallback(void *info, const CGPathElement *element); + CGPathApply(cgPath, (__bridge void * _Nullable)(handler), CGPathEnumerationCallback); +} + +@end + +void CGPathEnumerationCallback(void *info, const CGPathElement *element) +{ + LOTBezierPathEnumerationHandler handler = (__bridge LOTBezierPathEnumerationHandler)(info); + if (handler) { + handler(element); + } +} diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTHelpers.h b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTHelpers.h new file mode 100644 index 0000000..420b0a0 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTHelpers.h @@ -0,0 +1,26 @@ +// +// LOTHelpers.h +// Lottie +// +// Created by Brandon Withrow on 7/28/16. +// Copyright © 2016 Brandon Withrow. All rights reserved. +// + +#ifndef LOTHelpers_h +#define LOTHelpers_h + +#import "UIColor+Expanded.h" +#import "CGGeometry+LOTAdditions.h" +#import "LOTBezierPath.h" + +#define ENABLE_DEBUG_LOGGING NO +#define ENABLE_DEBUG_SHAPES NO + +#endif /* LOTHelpers_h */ + +// TODO Feature Phase +/* + - Trim Path individually + - Image Cache Support + - Skew transform + */ diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTRadialGradientLayer.h b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTRadialGradientLayer.h new file mode 100755 index 0000000..4cc4288 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTRadialGradientLayer.h @@ -0,0 +1,20 @@ +// +// LOTAnimationView +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// +#import +#import + +@interface LOTRadialGradientLayer : CALayer + +@property CGPoint startPoint; +@property CGPoint endPoint; + +@property (nonatomic, copy) NSArray *colors; +@property (nonatomic, copy) NSArray *locations; +@property (nonatomic, assign) BOOL isRadial; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTRadialGradientLayer.m b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTRadialGradientLayer.m new file mode 100755 index 0000000..f6bef1f --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/LOTRadialGradientLayer.m @@ -0,0 +1,89 @@ +// +// LOTAnimationView +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTRadialGradientLayer.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTRadialGradientLayer + +@dynamic isRadial; +@dynamic startPoint; +@dynamic endPoint; +@dynamic colors; +@dynamic locations; + ++ (BOOL)needsDisplayForKey:(NSString *)key { + if ([key isEqualToString:@"startPoint"] || + [key isEqualToString:@"endPoint"] || + [key isEqualToString:@"colors"] || + [key isEqualToString:@"locations"] || + [key isEqualToString:@"isRadial"]) { + return YES; + } + return [super needsDisplayForKey:key]; +} + +- (id)actionForKey:(NSString *)key { + id action = self.actions[key]; + if (action) { + if (action == [NSNull null]) { + return nil; + } + return action; + } + + if ([key isEqualToString:@"startPoint"] || + [key isEqualToString:@"endPoint"] || + [key isEqualToString:@"colors"] || + [key isEqualToString:@"locations"] || + [key isEqualToString:@"isRadial"]) { + CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:key]; + theAnimation.fromValue = [self.presentationLayer valueForKey:key]; + return theAnimation; + } + return [super actionForKey:key]; +} + +- (void)drawInContext:(CGContextRef)ctx { + if (self.colors.count == 0) { + return; + } + + NSInteger numberOfLocations = self.locations.count; + CGColorRef colorRef = (__bridge CGColorRef)[self.colors objectAtIndex:0]; + NSInteger numberOfComponents = CGColorGetNumberOfComponents(colorRef); + CGColorSpaceRef colorSpace = CGColorGetColorSpace(colorRef); + + CGPoint origin = self.startPoint; + CGFloat radius = LOT_PointDistanceFromPoint(self.startPoint, self.endPoint); + + CGFloat gradientLocations[numberOfLocations]; + CGFloat gradientComponents[numberOfLocations * numberOfComponents]; + + for (NSInteger locationIndex = 0; locationIndex < numberOfLocations; locationIndex++) { + + gradientLocations[locationIndex] = [self.locations[locationIndex] floatValue]; + const CGFloat *colorComponents = CGColorGetComponents((__bridge CGColorRef)self.colors[locationIndex]); + + for (NSInteger componentIndex = 0; componentIndex < numberOfComponents; componentIndex++) { + gradientComponents[numberOfComponents * locationIndex + componentIndex] = colorComponents[componentIndex]; + } + } + + CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradientComponents, gradientLocations, numberOfLocations); + + if (self.isRadial) { + CGContextDrawRadialGradient(ctx, gradient, origin, 0, origin, radius, kCGGradientDrawsAfterEndLocation); + } else { + CGContextDrawLinearGradient(ctx, gradient, self.startPoint, self.endPoint, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); + } + + CGGradientRelease(gradient); +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/UIColor+Expanded.h b/Pods/lottie-ios/lottie-ios/Classes/Extensions/UIColor+Expanded.h new file mode 100644 index 0000000..8589c92 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/UIColor+Expanded.h @@ -0,0 +1,51 @@ +#import "LOTPlatformCompat.h" + +// From http://github.com/ars/uicolor-utilities +#define CLAMP(val,min,max) MIN(MAX(val,min),max) + +@interface UIColor (UIColor_Expanded) +@property (nonatomic, readonly) CGColorSpaceModel colorSpaceModel; +@property (nonatomic, readonly) BOOL canProvideRGBComponents; +@property (nonatomic, readonly) CGFloat red; // Only valid if canProvideRGBComponents is YES +@property (nonatomic, readonly) CGFloat green; // Only valid if canProvideRGBComponents is YES +@property (nonatomic, readonly) CGFloat blue; // Only valid if canProvideRGBComponents is YES +@property (nonatomic, readonly) CGFloat white; // Only valid if colorSpaceModel == kCGColorSpaceModelMonochrome +@property (nonatomic, readonly) CGFloat alpha; +@property (nonatomic, readonly) UInt32 rgbHex; + +- (NSString *)LOT_colorSpaceString; + +- (NSArray *)LOT_arrayFromRGBAComponents; + +- (BOOL)LOT_red:(CGFloat *)r green:(CGFloat *)g blue:(CGFloat *)b alpha:(CGFloat *)a; + +- (UIColor *)LOT_colorByLuminanceMapping; + +- (UIColor *)LOT_colorByMultiplyingByRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; +- (UIColor *) LOT_colorByAddingRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; +- (UIColor *) LOT_colorByLighteningToRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; +- (UIColor *) LOT_colorByDarkeningToRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; + +- (UIColor *)LOT_colorByMultiplyingBy:(CGFloat)f; +- (UIColor *) LOT_colorByAdding:(CGFloat)f; +- (UIColor *) LOT_colorByLighteningTo:(CGFloat)f; +- (UIColor *) LOT_colorByDarkeningTo:(CGFloat)f; + +- (UIColor *)LOT_colorByMultiplyingByColor:(UIColor *)color; +- (UIColor *) LOT_colorByAddingColor:(UIColor *)color; +- (UIColor *) LOT_colorByLighteningToColor:(UIColor *)color; +- (UIColor *) LOT_colorByDarkeningToColor:(UIColor *)color; + +- (NSString *)LOT_stringFromColor; +- (NSString *)LOT_hexStringValue; + ++ (UIColor *)LOT_randomColor; ++ (UIColor *)LOT_colorWithString:(NSString *)stringToConvert; ++ (UIColor *)LOT_colorWithRGBHex:(UInt32)hex; ++ (UIColor *)LOT_colorWithHexString:(NSString *)stringToConvert; + ++ (UIColor *)LOT_colorWithName:(NSString *)cssColorName; + ++ (UIColor *)LOT_colorByLerpingFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor amount:(CGFloat)amount; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Extensions/UIColor+Expanded.m b/Pods/lottie-ios/lottie-ios/Classes/Extensions/UIColor+Expanded.m new file mode 100644 index 0000000..72f4353 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Extensions/UIColor+Expanded.m @@ -0,0 +1,480 @@ +#import "UIColor+Expanded.h" + +/* + + Thanks to Poltras, Millenomi, Eridius, Nownot, WhatAHam, jberry, + and everyone else who helped out but whose name is inadvertently omitted + + */ + +/* + Current outstanding request list: + + - PolarBearFarm - color descriptions ([UIColor warmGrayWithHintOfBlueTouchOfRedAndSplashOfYellowColor]) + - Crayola color set + - Eridius - UIColor needs a method that takes 2 colors and gives a third complementary one + - Consider UIMutableColor that can be adjusted (brighter, cooler, warmer, thicker-alpha, etc) + */ + +/* + FOR REFERENCE: Color Space Models: enum CGColorSpaceModel { + kCGColorSpaceModelUnknown = -1, + kCGColorSpaceModelMonochrome, + kCGColorSpaceModelRGB, + kCGColorSpaceModelCMYK, + kCGColorSpaceModelLab, + kCGColorSpaceModelDeviceN, + kCGColorSpaceModelIndexed, + kCGColorSpaceModelPattern + }; + */ + +// Static cache of looked up color names. Used with +LOT_colorWithName: +static NSMutableDictionary *colorNameCache = nil; + +@interface UIColor (UIColor_Expanded_Support) ++ (UIColor *)searchForColorByName:(NSString *)cssColorName; +@end + +#pragma mark - + +@implementation UIColor (UIColor_Expanded) + +- (CGColorSpaceModel)colorSpaceModel { + return CGColorSpaceGetModel(CGColorGetColorSpace(self.CGColor)); +} + +- (NSString *)LOT_colorSpaceString { + switch (self.colorSpaceModel) { + case kCGColorSpaceModelUnknown: + return @"kCGColorSpaceModelUnknown"; + case kCGColorSpaceModelMonochrome: + return @"kCGColorSpaceModelMonochrome"; + case kCGColorSpaceModelRGB: + return @"kCGColorSpaceModelRGB"; + case kCGColorSpaceModelCMYK: + return @"kCGColorSpaceModelCMYK"; + case kCGColorSpaceModelLab: + return @"kCGColorSpaceModelLab"; + case kCGColorSpaceModelDeviceN: + return @"kCGColorSpaceModelDeviceN"; + case kCGColorSpaceModelIndexed: + return @"kCGColorSpaceModelIndexed"; + case kCGColorSpaceModelPattern: + return @"kCGColorSpaceModelPattern"; + default: + return @"Not a valid color space"; + } +} + +- (BOOL)canProvideRGBComponents { + switch (self.colorSpaceModel) { + case kCGColorSpaceModelRGB: + case kCGColorSpaceModelMonochrome: + return YES; + default: + return NO; + } +} + +- (NSArray *)LOT_arrayFromRGBAComponents { + NSAssert(self.canProvideRGBComponents, @"Must be an RGB color to use -LOT_arrayFromRGBAComponents"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [NSArray arrayWithObjects: + [NSNumber numberWithFloat:r], + [NSNumber numberWithFloat:g], + [NSNumber numberWithFloat:b], + [NSNumber numberWithFloat:a], + nil]; +} + +- (BOOL)LOT_red:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha { + const CGFloat *components = CGColorGetComponents(self.CGColor); + + CGFloat r,g,b,a; + + switch (self.colorSpaceModel) { + case kCGColorSpaceModelMonochrome: + r = g = b = components[0]; + a = components[1]; + break; + case kCGColorSpaceModelRGB: + r = components[0]; + g = components[1]; + b = components[2]; + a = components[3]; + break; + default: // We don't know how to handle this model + return NO; + } + + if (red) *red = r; + if (green) *green = g; + if (blue) *blue = b; + if (alpha) *alpha = a; + + return YES; +} + +- (CGFloat)red { + NSAssert(self.canProvideRGBComponents, @"Must be an RGB color to use -red"); + const CGFloat *c = CGColorGetComponents(self.CGColor); + return c[0]; +} + +- (CGFloat)green { + NSAssert(self.canProvideRGBComponents, @"Must be an RGB color to use -green"); + const CGFloat *c = CGColorGetComponents(self.CGColor); + if (self.colorSpaceModel == kCGColorSpaceModelMonochrome) return c[0]; + return c[1]; +} + +- (CGFloat)blue { + NSAssert(self.canProvideRGBComponents, @"Must be an RGB color to use -blue"); + const CGFloat *c = CGColorGetComponents(self.CGColor); + if (self.colorSpaceModel == kCGColorSpaceModelMonochrome) return c[0]; + return c[2]; +} + +- (CGFloat)white { + NSAssert(self.colorSpaceModel == kCGColorSpaceModelMonochrome, @"Must be a Monochrome color to use -white"); + const CGFloat *c = CGColorGetComponents(self.CGColor); + return c[0]; +} + +- (CGFloat)alpha { + return CGColorGetAlpha(self.CGColor); +} + +- (UInt32)rgbHex { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use rgbHex"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return 0; + + r = MIN(MAX(self.red, 0.0f), 1.0f); + g = MIN(MAX(self.green, 0.0f), 1.0f); + b = MIN(MAX(self.blue, 0.0f), 1.0f); + + return (((int)roundf(r * 255)) << 16) + | (((int)roundf(g * 255)) << 8) + | (((int)roundf(b * 255))); +} + +#pragma mark Arithmetic operations + +- (UIColor *)LOT_colorByLuminanceMapping { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + // http://en.wikipedia.org/wiki/Luma_(video) + // Y = 0.2126 R + 0.7152 G + 0.0722 B + return [UIColor colorWithWhite:r*0.2126f + g*0.7152f + b*0.0722f + alpha:a]; + +} + +- (UIColor *)LOT_colorByMultiplyingByRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [UIColor colorWithRed:MAX(0.0, MIN(1.0, r * red)) + green:MAX(0.0, MIN(1.0, g * green)) + blue:MAX(0.0, MIN(1.0, b * blue)) + alpha:MAX(0.0, MIN(1.0, a * alpha))]; +} + +- (UIColor *)LOT_colorByAddingRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [UIColor colorWithRed:MAX(0.0, MIN(1.0, r + red)) + green:MAX(0.0, MIN(1.0, g + green)) + blue:MAX(0.0, MIN(1.0, b + blue)) + alpha:MAX(0.0, MIN(1.0, a + alpha))]; +} + +- (UIColor *)LOT_colorByLighteningToRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [UIColor colorWithRed:MAX(r, red) + green:MAX(g, green) + blue:MAX(b, blue) + alpha:MAX(a, alpha)]; +} + +- (UIColor *)LOT_colorByDarkeningToRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [UIColor colorWithRed:MIN(r, red) + green:MIN(g, green) + blue:MIN(b, blue) + alpha:MIN(a, alpha)]; +} + +- (UIColor *)LOT_colorByMultiplyingBy:(CGFloat)f { + return [self LOT_colorByMultiplyingByRed:f green:f blue:f alpha:1.0f]; +} + +- (UIColor *)LOT_colorByAdding:(CGFloat)f { + return [self LOT_colorByMultiplyingByRed:f green:f blue:f alpha:0.0f]; +} + +- (UIColor *)LOT_colorByLighteningTo:(CGFloat)f { + return [self LOT_colorByLighteningToRed:f green:f blue:f alpha:0.0f]; +} + +- (UIColor *)LOT_colorByDarkeningTo:(CGFloat)f { + return [self LOT_colorByDarkeningToRed:f green:f blue:f alpha:1.0f]; +} + +- (UIColor *)LOT_colorByMultiplyingByColor:(UIColor *)color { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [self LOT_colorByMultiplyingByRed:r green:g blue:b alpha:1.0f]; +} + +- (UIColor *)LOT_colorByAddingColor:(UIColor *)color { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [self LOT_colorByAddingRed:r green:g blue:b alpha:0.0f]; +} + +- (UIColor *)LOT_colorByLighteningToColor:(UIColor *)color { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [self LOT_colorByLighteningToRed:r green:g blue:b alpha:0.0f]; +} + +- (UIColor *)LOT_colorByDarkeningToColor:(UIColor *)color { + NSAssert(self.canProvideRGBComponents, @"Must be a RGB color to use arithmetic operations"); + + CGFloat r,g,b,a; + if (![self LOT_red:&r green:&g blue:&b alpha:&a]) return nil; + + return [self LOT_colorByDarkeningToRed:r green:g blue:b alpha:1.0f]; +} + +#pragma mark String utilities + +- (NSString *)LOT_stringFromColor { + NSAssert(self.canProvideRGBComponents, @"Must be an RGB color to use -LOT_stringFromColor"); + NSString *result; + switch (self.colorSpaceModel) { + case kCGColorSpaceModelRGB: + result = [NSString stringWithFormat:@"{%0.3f, %0.3f, %0.3f, %0.3f}", self.red, self.green, self.blue, self.alpha]; + break; + case kCGColorSpaceModelMonochrome: + result = [NSString stringWithFormat:@"{%0.3f, %0.3f}", self.white, self.alpha]; + break; + default: + result = nil; + } + return result; +} + +- (NSString *)LOT_hexStringValue { + return [NSString stringWithFormat:@"%0.6X", (unsigned int)self.rgbHex]; +} + ++ (UIColor *)LOT_colorWithString:(NSString *)stringToConvert { + NSScanner *scanner = [NSScanner scannerWithString:stringToConvert]; + if (![scanner scanString:@"{" intoString:NULL]) return nil; + const NSUInteger kMaxComponents = 4; + float c[kMaxComponents]; + NSUInteger i = 0; + if (![scanner scanFloat:&c[i++]]) return nil; + while (1) { + if ([scanner scanString:@"}" intoString:NULL]) break; + if (i >= kMaxComponents) return nil; + if ([scanner scanString:@"," intoString:NULL]) { + if (![scanner scanFloat:&c[i++]]) return nil; + } else { + // either we're at the end of there's an unexpected character here + // both cases are error conditions + return nil; + } + } + if (![scanner isAtEnd]) return nil; + UIColor *color; + switch (i) { + case 2: // monochrome + color = [UIColor colorWithWhite:c[0] alpha:c[1]]; + break; + case 4: // RGB + color = [UIColor colorWithRed:c[0] green:c[1] blue:c[2] alpha:c[3]]; + break; + default: + color = nil; + } + return color; +} + +#pragma mark Class methods + ++ (UIColor *)LOT_randomColor { + return [UIColor colorWithRed:(CGFloat)random() / (CGFloat)RAND_MAX + green:(CGFloat)random() / (CGFloat)RAND_MAX + blue:(CGFloat)random() / (CGFloat)RAND_MAX + alpha:1.0f]; +} + ++ (UIColor *)LOT_colorWithRGBHex:(UInt32)hex { + int r = (hex >> 16) & 0xFF; + int g = (hex >> 8) & 0xFF; + int b = (hex) & 0xFF; + + return [UIColor colorWithRed:r / 255.0f + green:g / 255.0f + blue:b / 255.0f + alpha:1.0f]; +} + +// Returns a UIColor by scanning the string for a hex number and passing that to +[UIColor LOT_colorWithRGBHex:] +// Skips any leading whitespace and ignores any trailing characters ++ (UIColor *)LOT_colorWithHexString:(NSString *)stringToConvert { + NSString *strippedString = [stringToConvert stringByReplacingOccurrencesOfString:@"#" withString:@""]; + NSScanner *scanner = [NSScanner scannerWithString:strippedString]; + unsigned hexNum; + if (![scanner scanHexInt:&hexNum]) return nil; + return [UIColor LOT_colorWithRGBHex:hexNum]; +} + +// Lookup a color using css 3/svg color name ++ (UIColor *)LOT_colorWithName:(NSString *)cssColorName { + UIColor *color; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + colorNameCache = [[NSMutableDictionary alloc] init]; + }); + + @synchronized(colorNameCache) { + // Look for the color in the cache + color = [colorNameCache objectForKey:cssColorName]; + + if ((id)color == [NSNull null]) { + // If it wasn't there previously, it's still not there now + color = nil; + } else if (!color) { + // Color not in cache, so search for it now + color = [self searchForColorByName:cssColorName]; + + // Set the value in cache, storing NSNull on failure + [colorNameCache setObject:(color ?: (id)[NSNull null]) + forKey:cssColorName]; + } + } + + return color; +} + ++ (UIColor *)LOT_colorByLerpingFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor amount:(CGFloat)amount { + NSAssert((toColor != nil && fromColor != nil), @"Passing Nil Color"); + amount = CLAMP(amount, 0.f, 1.f); + const CGFloat *fromComponents = CGColorGetComponents(fromColor.CGColor); + const CGFloat *toComponents = CGColorGetComponents(toColor.CGColor); + float r = fromComponents[0] + ((toComponents[0] - fromComponents[0]) * amount); + float g = fromComponents[1] + ((toComponents[1] - fromComponents[1]) * amount); + float b = fromComponents[2] + ((toComponents[2] - fromComponents[2]) * amount); + float a = fromComponents[3] + ((toComponents[3] - fromComponents[3]) * amount); + return [UIColor colorWithRed:r green:g blue:b alpha:a]; +} + +@end + +#pragma mark - + +@implementation UIColor (UIColor_Expanded_Support) +/* + * Database of color names and hex rgb values, derived + * from the css 3 color spec: + * http://www.w3.org/TR/css3-color/ + * + * We think this is a very compact way of storing + * this information, and relatively cheap to lookup. + * + * Note that we search for color names starting with ',' + * and terminated by '#', so that we don't get false matches. + * For this reason, the database begins with ','. + */ +static const char *colorNameDB = "," +"aliceblue#f0f8ff,antiquewhite#faebd7,aqua#00ffff,aquamarine#7fffd4,azure#f0ffff," +"beige#f5f5dc,bisque#ffe4c4,black#000000,blanchedalmond#ffebcd,blue#0000ff," +"blueviolet#8a2be2,brown#a52a2a,burlywood#deb887,cadetblue#5f9ea0,chartreuse#7fff00," +"chocolate#d2691e,coral#ff7f50,cornflowerblue#6495ed,cornsilk#fff8dc,crimson#dc143c," +"cyan#00ffff,darkblue#00008b,darkcyan#008b8b,darkgoldenrod#b8860b,darkgray#a9a9a9," +"darkgreen#006400,darkgrey#a9a9a9,darkkhaki#bdb76b,darkmagenta#8b008b," +"darkolivegreen#556b2f,darkorange#ff8c00,darkorchid#9932cc,darkred#8b0000," +"darksalmon#e9967a,darkseagreen#8fbc8f,darkslateblue#483d8b,darkslategray#2f4f4f," +"darkslategrey#2f4f4f,darkturquoise#00ced1,darkviolet#9400d3,deeppink#ff1493," +"deepskyblue#00bfff,dimgray#696969,dimgrey#696969,dodgerblue#1e90ff," +"firebrick#b22222,floralwhite#fffaf0,forestgreen#228b22,fuchsia#ff00ff," +"gainsboro#dcdcdc,ghostwhite#f8f8ff,gold#ffd700,goldenrod#daa520,gray#808080," +"green#008000,greenyellow#adff2f,grey#808080,honeydew#f0fff0,hotpink#ff69b4," +"indianred#cd5c5c,indigo#4b0082,ivory#fffff0,khaki#f0e68c,lavender#e6e6fa," +"lavenderblush#fff0f5,lawngreen#7cfc00,lemonchiffon#fffacd,lightblue#add8e6," +"lightcoral#f08080,lightcyan#e0ffff,lightgoldenrodyellow#fafad2,lightgray#d3d3d3," +"lightgreen#90ee90,lightgrey#d3d3d3,lightpink#ffb6c1,lightsalmon#ffa07a," +"lightseagreen#20b2aa,lightskyblue#87cefa,lightslategray#778899," +"lightslategrey#778899,lightsteelblue#b0c4de,lightyellow#ffffe0,lime#00ff00," +"limegreen#32cd32,linen#faf0e6,magenta#ff00ff,maroon#800000,mediumaquamarine#66cdaa," +"mediumblue#0000cd,mediumorchid#ba55d3,mediumpurple#9370db,mediumseagreen#3cb371," +"mediumslateblue#7b68ee,mediumspringgreen#00fa9a,mediumturquoise#48d1cc," +"mediumvioletred#c71585,midnightblue#191970,mintcream#f5fffa,mistyrose#ffe4e1," +"moccasin#ffe4b5,navajowhite#ffdead,navy#000080,oldlace#fdf5e6,olive#808000," +"olivedrab#6b8e23,orange#ffa500,orangered#ff4500,orchid#da70d6,palegoldenrod#eee8aa," +"palegreen#98fb98,paleturquoise#afeeee,palevioletred#db7093,papayawhip#ffefd5," +"peachpuff#ffdab9,peru#cd853f,pink#ffc0cb,plum#dda0dd,powderblue#b0e0e6," +"purple#800080,red#ff0000,rosybrown#bc8f8f,royalblue#4169e1,saddlebrown#8b4513," +"salmon#fa8072,sandybrown#f4a460,seagreen#2e8b57,seashell#fff5ee,sienna#a0522d," +"silver#c0c0c0,skyblue#87ceeb,slateblue#6a5acd,slategray#708090,slategrey#708090," +"snow#fffafa,springgreen#00ff7f,steelblue#4682b4,tan#d2b48c,teal#008080," +"thistle#d8bfd8,tomato#ff6347,turquoise#40e0d0,violet#ee82ee,wheat#f5deb3," +"white#ffffff,whitesmoke#f5f5f5,yellow#ffff00,yellowgreen#9acd32"; + ++ (UIColor *)searchForColorByName:(NSString *)cssColorName { + UIColor *result = nil; + + // Compile the string we'll use to search against the database + // We search for ",#" to avoid false matches + const char *searchString = [[NSString stringWithFormat:@",%@#", cssColorName] UTF8String]; + + // Search for the color name + const char *found = strstr(colorNameDB, searchString); + + // If found, step past the search string and grab the hex representation + if (found) { + const char *after = found + strlen(searchString); + int hex; + if (sscanf(after, "%x", &hex) == 1) { + result = [self LOT_colorWithRGBHex:hex]; + } + } + + return result; +} +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/CALayer+Compat.h b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/CALayer+Compat.h new file mode 100644 index 0000000..55cd9cb --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/CALayer+Compat.h @@ -0,0 +1,18 @@ +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright (c) 2017 Airbnb. All rights reserved. +// + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import +#import + +@interface CALayer (Compat) + +@property (nonatomic, assign) BOOL allowsEdgeAntialiasing; + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/CALayer+Compat.m b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/CALayer+Compat.m new file mode 100644 index 0000000..c364a7e --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/CALayer+Compat.m @@ -0,0 +1,18 @@ +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright (c) 2017 Airbnb. All rights reserved. +// + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import "CALayer+Compat.h" + +@implementation CALayer (Compat) + +- (BOOL)allowsEdgeAntialiasing { return NO; } +- (void)setAllowsEdgeAntialiasing:(BOOL)allowsEdgeAntialiasing { } + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/LOTPlatformCompat.h b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/LOTPlatformCompat.h new file mode 100644 index 0000000..eea9184 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/LOTPlatformCompat.h @@ -0,0 +1,37 @@ +// +// LOTPlatformCompat.h +// Lottie +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright (c) 2017 Airbnb. All rights reserved. +// + +#ifndef LOTPlatformCompat_h +#define LOTPlatformCompat_h + +#include + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +#import + +#else + +#import +#import "UIColor.h" +#import "CALayer+Compat.h" +#import "NSValue+Compat.h" +#import "UIBezierPath.h" + +NS_INLINE NSString *NSStringFromCGRect(CGRect rect) { + return NSStringFromRect(rect); +} + +NS_INLINE NSString *NSStringFromCGPoint(CGPoint point) { + return NSStringFromPoint(point); +} + +typedef NSEdgeInsets UIEdgeInsets; + +#endif +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/NSValue+Compat.h b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/NSValue+Compat.h new file mode 100644 index 0000000..0672457 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/NSValue+Compat.h @@ -0,0 +1,22 @@ +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright (c) 2017 Airbnb. All rights reserved. +// + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import + +@interface NSValue (Compat) + ++ (NSValue *)valueWithCGRect:(CGRect)rect; ++ (NSValue *)valueWithCGPoint:(CGPoint)point; + +@property (nonatomic, readonly) CGRect CGRectValue; +@property(nonatomic, readonly) CGPoint CGPointValue; +@property (nonatomic, readonly) CGSize CGSizeValue; + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/NSValue+Compat.m b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/NSValue+Compat.m new file mode 100644 index 0000000..6547455 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/NSValue+Compat.m @@ -0,0 +1,35 @@ +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright (c) 2017 Airbnb. All rights reserved. +// + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import "NSValue+Compat.h" + +@implementation NSValue (Compat) + ++ (NSValue *)valueWithCGRect:(CGRect)rect { + return [self valueWithRect:rect]; +} + ++ (NSValue *)valueWithCGPoint:(CGPoint)point { + return [self valueWithPoint:point]; +} + +- (CGRect)CGRectValue { + return self.rectValue; +} + +- (CGPoint)CGPointValue { + return self.pointValue; +} + +- (CGSize)CGSizeValue { + return self.sizeValue; +} + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIBezierPath.h b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIBezierPath.h new file mode 100755 index 0000000..6de2c31 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIBezierPath.h @@ -0,0 +1,80 @@ +// Kindly stolen from https://github.com/BigZaphod/Chameleon +/* + * Copyright (c) 2011, The Iconfactory. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of The Iconfactory nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * 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 ICONFACTORY 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. + */ + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import +#import + +typedef NS_OPTIONS(NSUInteger, UIRectCorner) { + UIRectCornerTopLeft = 1 << 0, + UIRectCornerTopRight = 1 << 1, + UIRectCornerBottomLeft = 1 << 2, + UIRectCornerBottomRight = 1 << 3, + UIRectCornerAllCorners = UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight +}; + +@interface UIBezierPath : NSObject + ++ (UIBezierPath *)bezierPath; ++ (UIBezierPath *)bezierPathWithRect:(CGRect)rect; ++ (UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect; ++ (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius; ++ (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii; ++ (UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise; ++ (UIBezierPath *)bezierPathWithCGPath:(CGPathRef)CGPath; + +- (void)moveToPoint:(CGPoint)point; +- (void)addLineToPoint:(CGPoint)point; +- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise; +- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2; +- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint; +- (void)closePath; +- (void)removeAllPoints; +- (void)appendPath:(UIBezierPath *)bezierPath; +- (void)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase; +- (void)getLineDash:(CGFloat *)pattern count:(NSInteger *)count phase:(CGFloat *)phase; +- (BOOL)containsPoint:(CGPoint)point; +- (void)applyTransform:(CGAffineTransform)transform; + +@property (nonatomic) CGPathRef CGPath; +@property (nonatomic, readonly) CGPoint currentPoint; +@property (nonatomic) CGFloat lineWidth; +@property (nonatomic) CGLineCap lineCapStyle; +@property (nonatomic) CGLineJoin lineJoinStyle; +@property (nonatomic) CGFloat miterLimit; +@property (nonatomic) CGFloat flatness; +@property (nonatomic) BOOL usesEvenOddFillRule; +@property (readonly, getter=isEmpty) BOOL empty; +@property (nonatomic, readonly) CGRect bounds; +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIBezierPath.m b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIBezierPath.m new file mode 100755 index 0000000..ecc2549 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIBezierPath.m @@ -0,0 +1,312 @@ +// Kindly stolen from https://github.com/BigZaphod/Chameleon +/* + * Copyright (c) 2011, The Iconfactory. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of The Iconfactory nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * 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 ICONFACTORY 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. + */ + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import "UIBezierPath.h" + +@implementation UIBezierPath { + CGFloat *_lineDashPattern; + NSInteger _lineDashCount; + CGFloat _lineDashPhase; +} +@synthesize CGPath = _path; + +- (id)init { + self = [super init]; + if (self) { + _path = CGPathCreateMutable(); + _lineWidth = 1; + _lineCapStyle = kCGLineCapButt; + _lineJoinStyle = kCGLineJoinMiter; + _miterLimit = 10; + _flatness = 0.6; + _usesEvenOddFillRule = NO; + _lineDashPattern = NULL; + _lineDashCount = 0; + _lineDashPhase = 0; + } + return self; +} + +- (void)dealloc { + if (_path) CGPathRelease(_path); +} + +- (id)copyWithZone:(NSZone *)zone { + UIBezierPath *copy = [[self class] new]; + + copy.CGPath = self.CGPath; + copy.lineWidth = self.lineWidth; + copy.lineCapStyle = self.lineCapStyle; + copy.lineJoinStyle = self.lineJoinStyle; + copy.miterLimit = self.miterLimit; + copy.flatness = self.flatness; + copy.usesEvenOddFillRule = self.usesEvenOddFillRule; + + NSInteger lineDashCount = 0; + [self getLineDash:NULL count:&lineDashCount phase:NULL]; + + if (lineDashCount > 0) { + CGFloat *lineDashPattern = malloc(sizeof(CGFloat) * lineDashCount); + CGFloat lineDashPhase = 0; + [self getLineDash:lineDashPattern count:NULL phase:&lineDashPhase]; + [copy setLineDash:lineDashPattern count:lineDashCount phase:lineDashPhase]; + free(lineDashPattern); + } + + return copy; +} + ++ (UIBezierPath *)bezierPathWithCGPath:(CGPathRef)CGPath { + NSAssert(CGPath != NULL, @"CGPath must not be NULL"); + UIBezierPath *bezierPath = [[self alloc] init]; + bezierPath.CGPath = CGPath; + return bezierPath; +} + ++ (UIBezierPath *)bezierPath { + UIBezierPath *bezierPath = [[self alloc] init]; + return bezierPath; +} + ++ (UIBezierPath *)bezierPathWithRect:(CGRect)rect { + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddRect(path, NULL, rect); + + UIBezierPath *bezierPath = [[self alloc] init]; + bezierPath->_path = path; + return bezierPath; +} + ++ (UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect { + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddEllipseInRect(path, NULL, rect); + + UIBezierPath *bezierPath = [[self alloc] init]; + bezierPath->_path = path; + return bezierPath; +} + ++ (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect + cornerRadius:(CGFloat)cornerRadius { + return [self bezierPathWithRoundedRect:rect + byRoundingCorners:UIRectCornerAllCorners + cornerRadii:CGSizeMake(cornerRadius, cornerRadius)]; +} + ++ (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect + byRoundingCorners:(UIRectCorner)corners + cornerRadii:(CGSize)cornerRadii { + + CGMutablePathRef path = CGPathCreateMutable(); + + const CGPoint topLeft = rect.origin; + const CGPoint topRight = CGPointMake(CGRectGetMaxX(rect), CGRectGetMinY(rect)); + const CGPoint bottomRight = CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect)); + const CGPoint bottomLeft = CGPointMake(CGRectGetMinX(rect), CGRectGetMaxY(rect)); + + if (corners & UIRectCornerTopLeft) { + CGPathMoveToPoint(path, NULL, topLeft.x + cornerRadii.width, topLeft.y); + } else { + CGPathMoveToPoint(path, NULL, topLeft.x, topLeft.y); + } + + if (corners & UIRectCornerTopRight) { + CGPathAddLineToPoint(path, NULL, topRight.x - cornerRadii.width, topRight.y); + CGPathAddCurveToPoint(path, NULL, topRight.x, topRight.y, topRight.x, topRight.y + cornerRadii.height, topRight.x, topRight.y + cornerRadii.height); + } else { + CGPathAddLineToPoint(path, NULL, topRight.x, topRight.y); + } + + if (corners & UIRectCornerBottomRight) { + CGPathAddLineToPoint(path, NULL, bottomRight.x, bottomRight.y - cornerRadii.height); + CGPathAddCurveToPoint(path, NULL, bottomRight.x, bottomRight.y, bottomRight.x - cornerRadii.width, bottomRight.y, bottomRight.x - cornerRadii.width, bottomRight.y); + } else { + CGPathAddLineToPoint(path, NULL, bottomRight.x, bottomRight.y); + } + + if (corners & UIRectCornerBottomLeft) { + CGPathAddLineToPoint(path, NULL, bottomLeft.x + cornerRadii.width, bottomLeft.y); + CGPathAddCurveToPoint(path, NULL, bottomLeft.x, bottomLeft.y, bottomLeft.x, bottomLeft.y - cornerRadii.height, bottomLeft.x, bottomLeft.y - cornerRadii.height); + } else { + CGPathAddLineToPoint(path, NULL, bottomLeft.x, bottomLeft.y); + } + + if (corners & UIRectCornerTopLeft) { + CGPathAddLineToPoint(path, NULL, topLeft.x, topLeft.y + cornerRadii.height); + CGPathAddCurveToPoint(path, NULL, topLeft.x, topLeft.y, topLeft.x + cornerRadii.width, topLeft.y, topLeft.x + cornerRadii.width, topLeft.y); + } else { + CGPathAddLineToPoint(path, NULL, topLeft.x, topLeft.y); + } + + CGPathCloseSubpath(path); + + UIBezierPath *bezierPath = [[self alloc] init]; + bezierPath->_path = path; + return bezierPath; +} + ++ (UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center + radius:(CGFloat)radius + startAngle:(CGFloat)startAngle + endAngle:(CGFloat)endAngle + clockwise:(BOOL)clockwise { + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddArc(path, NULL, center.x, center.y, radius, startAngle, endAngle, clockwise); + + UIBezierPath *bezierPath = [[self alloc] init]; + bezierPath->_path = path; + return bezierPath; +} + +- (void)moveToPoint:(CGPoint)point { + CGMutablePathRef mutablePath = CGPathCreateMutableCopy(_path); + CGPathMoveToPoint(mutablePath, NULL, point.x, point.y); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +- (void)addLineToPoint:(CGPoint)point { + CGMutablePathRef mutablePath = CGPathCreateMutableCopy(_path); + CGPathAddLineToPoint(mutablePath, NULL, point.x, point.y); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise { + CGMutablePathRef mutablePath = CGPathCreateMutableCopy(_path); + CGPathAddArc(mutablePath, NULL, center.x, center.y, radius, startAngle, endAngle, clockwise); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2 { + CGMutablePathRef mutablePath = CGPathCreateMutableCopy(_path); + CGPathAddCurveToPoint(mutablePath, NULL, controlPoint1.x, controlPoint1.y, controlPoint2.x, controlPoint2.y, endPoint.x, endPoint.y); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint { + CGMutablePathRef mutablePath = CGPathCreateMutableCopy(_path); + CGPathAddQuadCurveToPoint(mutablePath, NULL, controlPoint.x, controlPoint.y, endPoint.x, endPoint.y); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +- (void)closePath { + CGMutablePathRef mutablePath = CGPathCreateMutableCopy(_path); + CGPathCloseSubpath(mutablePath); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +- (void)removeAllPoints { + CGMutablePathRef mutablePath = CGPathCreateMutable(); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +- (void)appendPath:(UIBezierPath *)bezierPath { + if (bezierPath) { + CGMutablePathRef mutablePath = CGPathCreateMutableCopy(_path); + CGPathAddPath(mutablePath, NULL, bezierPath.CGPath); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); + } +} + +- (void)setCGPath:(CGPathRef)path { + NSAssert(path != NULL, @"path must not be NULL"); + if (path != _path) { + if (_path) CGPathRelease(_path); + _path = CGPathCreateCopy(path); + } +} + +- (CGPoint)currentPoint { + return CGPathGetCurrentPoint(_path); +} + +- (void)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase { + free(_lineDashPattern); + + if (pattern && count > 0) { + const size_t size = sizeof(CGFloat) * count; + _lineDashPattern = malloc(size); + bcopy(pattern, _lineDashPattern, size); + } else { + _lineDashPattern = NULL; + } + + _lineDashCount = count; + _lineDashPhase = phase; +} + +- (void)getLineDash:(CGFloat *)pattern count:(NSInteger *)count phase:(CGFloat *)phase { + if (pattern && _lineDashPattern && _lineDashCount > 0) { + const size_t size = sizeof(CGFloat) * _lineDashCount; + bcopy(_lineDashPattern, pattern, size); + } + + if (count) { + *count = _lineDashCount; + } + + if (phase) { + *phase = _lineDashPhase; + } +} + +- (BOOL)containsPoint:(CGPoint)point { + return CGPathContainsPoint(_path, NULL, point, _usesEvenOddFillRule); +} + +- (BOOL)isEmpty { + return CGPathIsEmpty(_path); +} + +- (CGRect)bounds { + return CGPathGetBoundingBox(_path); +} + +- (void)applyTransform:(CGAffineTransform)transform { + CGMutablePathRef mutablePath = CGPathCreateMutable(); + CGPathAddPath(mutablePath, &transform, _path); + self.CGPath = mutablePath; + CGPathRelease(mutablePath); +} + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIColor.h b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIColor.h new file mode 100644 index 0000000..8e14137 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIColor.h @@ -0,0 +1,44 @@ +// +// UIColor.h +// Lottie +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import +#import + +@interface UIColor : NSObject + ++ (UIColor *)colorWithWhite:(CGFloat)white alpha:(CGFloat)alpha; ++ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha; ++ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; ++ (UIColor *)colorWithCGColor:(CGColorRef)cgColor; + ++ (UIColor *)blackColor; ++ (UIColor *)darkGrayColor; ++ (UIColor *)lightGrayColor; ++ (UIColor *)whiteColor; ++ (UIColor *)grayColor; ++ (UIColor *)redColor; ++ (UIColor *)greenColor; ++ (UIColor *)blueColor; ++ (UIColor *)cyanColor; ++ (UIColor *)yellowColor; ++ (UIColor *)magentaColor; ++ (UIColor *)orangeColor; ++ (UIColor *)purpleColor; ++ (UIColor *)brownColor; ++ (UIColor *)clearColor; + +- (UIColor *)colorWithAlphaComponent:(CGFloat)alpha; + +@property (nonatomic, readonly) CGColorRef CGColor; + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIColor.m b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIColor.m new file mode 100644 index 0000000..ac223fe --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/MacCompatibility/UIColor.m @@ -0,0 +1,158 @@ +// +// UIColor.m +// Lottie +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#include + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +#import "UIColor.h" +#import + +#define StaticColor(staticColor) \ +static UIColor *color = nil; \ +static dispatch_once_t onceToken; \ +dispatch_once(&onceToken, ^{ \ + color = NSColor.staticColor.UIColor; \ +}); \ +return color; \ + +@interface UIColor () + +@property (nonatomic, strong) NSColor *color; + +- (instancetype)initWithNSColor:(NSColor *)color; + +@end + +@interface NSColor (UIColor) + +@property (nonatomic, readonly) UIColor *UIColor; + +@end + +@implementation UIColor + +- (instancetype)initWithNSColor:(NSColor *)color { + self = [super init]; + if (self) { + self.color = color; + } + return self; +} + ++ (UIColor *)colorWithNSColor:(NSColor *)color { + return [[self alloc] initWithNSColor:color]; +} + ++ (UIColor *)colorWithWhite:(CGFloat)white alpha:(CGFloat)alpha { + return [[NSColor colorWithWhite:white alpha:alpha] UIColor]; +} + ++ (UIColor *)colorWithHue:(CGFloat)hue + saturation:(CGFloat)saturation + brightness:(CGFloat)brightness + alpha:(CGFloat)alpha { + return [[NSColor colorWithHue:hue + saturation:saturation + brightness:brightness + alpha:alpha] UIColor]; +} + ++ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha { + return [[NSColor colorWithRed:red + green:green + blue:blue + alpha:alpha] UIColor]; +} + ++ (UIColor *)colorWithCGColor:(CGColorRef)cgColor { + return [[NSColor colorWithCGColor:cgColor] UIColor]; +} + ++ (UIColor *)blackColor { + StaticColor(blackColor) +} + ++ (UIColor *)darkGrayColor { + StaticColor(darkGrayColor) +} + ++ (UIColor *)lightGrayColor { + StaticColor(lightGrayColor) +} + ++ (UIColor *)whiteColor { + StaticColor(whiteColor) +} + ++ (UIColor *)grayColor { + StaticColor(grayColor) +} + ++ (UIColor *)redColor { + StaticColor(redColor) +} + ++ (UIColor *)greenColor { + StaticColor(greenColor) +} + ++ (UIColor *)blueColor { + StaticColor(blueColor) +} + ++ (UIColor *)cyanColor { + StaticColor(cyanColor) +} + ++ (UIColor *)yellowColor { + StaticColor(yellowColor) +} + ++ (UIColor *)magentaColor { + StaticColor(magentaColor) +} + ++ (UIColor *)orangeColor { + StaticColor(orangeColor) +} + ++ (UIColor *)purpleColor { + StaticColor(purpleColor) +} + ++ (UIColor *)brownColor { + StaticColor(brownColor) +} + ++ (UIColor *)clearColor { + StaticColor(clearColor) +} + +- (CGColorRef)CGColor { + return self.color.CGColor; +} + +- (UIColor *)colorWithAlphaComponent:(CGFloat)alpha { + return [self.color colorWithAlphaComponent:alpha].UIColor; +} + +- (id)copyWithZone:(NSZone *)zone { + return [[self.color copyWithZone:zone] UIColor]; +} + +@end + +@implementation NSColor (UIColor) + +- (UIColor *)UIColor { + return [UIColor colorWithNSColor:self]; +} + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAsset.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAsset.h new file mode 100644 index 0000000..0455c7f --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAsset.h @@ -0,0 +1,38 @@ +// +// LOTAsset.h +// Pods +// +// Created by Brandon Withrow on 2/16/17. +// +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@class LOTLayerGroup; +@class LOTLayer; +@class LOTAssetGroup; + +@interface LOTAsset : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withAssetBundle:(NSBundle *_Nonnull)bundle + withFramerate:(NSNumber *)framerate; + +@property (nonatomic, readonly, nullable) NSString *referenceID; +@property (nonatomic, readonly, nullable) NSNumber *assetWidth; +@property (nonatomic, readonly, nullable) NSNumber *assetHeight; + +@property (nonatomic, readonly, nullable) NSString *imageName; +@property (nonatomic, readonly, nullable) NSString *imageDirectory; + +@property (nonatomic, readonly, nullable) LOTLayerGroup *layerGroup; + +@property (nonatomic, readwrite) NSString *rootDirectory; +@property (nonatomic, readonly) NSBundle *assetBundle; +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAsset.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAsset.m new file mode 100644 index 0000000..23e69a3 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAsset.m @@ -0,0 +1,59 @@ +// +// LOTAsset.m +// Pods +// +// Created by Brandon Withrow on 2/16/17. +// +// + +#import "LOTAsset.h" +#import "LOTLayer.h" +#import "LOTLayerGroup.h" +#import "LOTAssetGroup.h" + +@implementation LOTAsset + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withAssetBundle:(NSBundle *_Nonnull)bundle + withFramerate:(NSNumber *)framerate { + self = [super init]; + if (self) { + _assetBundle = bundle; + [self _mapFromJSON:jsonDictionary + withAssetGroup:assetGroup + withFramerate:framerate]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withFramerate:(NSNumber *)framerate { + _referenceID = [jsonDictionary[@"id"] copy]; + + if (jsonDictionary[@"w"]) { + _assetWidth = [jsonDictionary[@"w"] copy]; + } + + if (jsonDictionary[@"h"]) { + _assetHeight = [jsonDictionary[@"h"] copy]; + } + + if (jsonDictionary[@"u"]) { + _imageDirectory = [jsonDictionary[@"u"] copy]; + } + + if (jsonDictionary[@"p"]) { + _imageName = [jsonDictionary[@"p"] copy]; + } + + NSArray *layersJSON = jsonDictionary[@"layers"]; + if (layersJSON) { + _layerGroup = [[LOTLayerGroup alloc] initWithLayerJSON:layersJSON + withAssetGroup:assetGroup + withFramerate:framerate]; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAssetGroup.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAssetGroup.h new file mode 100644 index 0000000..dcae55a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAssetGroup.h @@ -0,0 +1,28 @@ +// +// LOTAssetGroup.h +// Pods +// +// Created by Brandon Withrow on 2/17/17. +// +// + +#import +#import + +@class LOTAsset; +@class LOTLayerGroup; +@interface LOTAssetGroup : NSObject +@property (nonatomic, readwrite) NSString * _Nullable rootDirectory; +@property (nonatomic, readonly, nullable) NSBundle *assetBundle; + +- (instancetype _Nonnull)initWithJSON:(NSArray * _Nonnull)jsonArray + withAssetBundle:(NSBundle *_Nullable)bundle + withFramerate:(NSNumber * _Nonnull)framerate; + +- (void)buildAssetNamed:(NSString * _Nonnull)refID withFramerate:(NSNumber * _Nonnull)framerate; + +- (void)finalizeInitializationWithFramerate:(NSNumber * _Nonnull)framerate; + +- (LOTAsset * _Nullable)assetModelForID:(NSString * _Nonnull)assetID; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAssetGroup.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAssetGroup.m new file mode 100644 index 0000000..4f9bb1a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTAssetGroup.m @@ -0,0 +1,70 @@ +// +// LOTAssetGroup.m +// Pods +// +// Created by Brandon Withrow on 2/17/17. +// +// + +#import "LOTAssetGroup.h" +#import "LOTAsset.h" + +@implementation LOTAssetGroup { + NSMutableDictionary *_assetMap; + NSDictionary *_assetJSONMap; +} + +- (instancetype _Nonnull)initWithJSON:(NSArray * _Nonnull)jsonArray + withAssetBundle:(NSBundle * _Nullable)bundle + withFramerate:(NSNumber * _Nonnull)framerate { + self = [super init]; + if (self) { + _assetBundle = bundle; + _assetMap = [NSMutableDictionary dictionary]; + NSMutableDictionary *assetJSONMap = [NSMutableDictionary dictionary]; + for (NSDictionary *assetDictionary in jsonArray) { + NSString *referenceID = assetDictionary[@"id"]; + if (referenceID) { + assetJSONMap[referenceID] = assetDictionary; + } + } + _assetJSONMap = assetJSONMap; + } + return self; +} + +- (void)buildAssetNamed:(NSString *)refID + withFramerate:(NSNumber * _Nonnull)framerate { + + if ([self assetModelForID:refID]) { + return; + } + + NSDictionary *assetDictionary = _assetJSONMap[refID]; + if (assetDictionary) { + LOTAsset *asset = [[LOTAsset alloc] initWithJSON:assetDictionary + withAssetGroup:self + withAssetBundle:_assetBundle + withFramerate:framerate]; + _assetMap[refID] = asset; + } +} + +- (void)finalizeInitializationWithFramerate:(NSNumber * _Nonnull)framerate { + for (NSString *refID in _assetJSONMap.allKeys) { + [self buildAssetNamed:refID withFramerate:framerate]; + } + _assetJSONMap = nil; +} + +- (LOTAsset *)assetModelForID:(NSString *)assetID { + return _assetMap[assetID]; +} + +- (void)setRootDirectory:(NSString *)rootDirectory { + _rootDirectory = rootDirectory; + [_assetMap enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, LOTAsset * _Nonnull obj, BOOL * _Nonnull stop) { + obj.rootDirectory = rootDirectory; + }]; +} +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayer.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayer.h new file mode 100644 index 0000000..aedb84b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayer.h @@ -0,0 +1,76 @@ +// +// LOTLayer.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTPlatformCompat.h" +#import "LOTKeyframe.h" + +@class LOTShapeGroup; +@class LOTMask; +@class LOTAsset; +@class LOTAssetGroup; + +typedef enum : NSInteger { + LOTLayerTypePrecomp, + LOTLayerTypeSolid, + LOTLayerTypeImage, + LOTLayerTypeNull, + LOTLayerTypeShape, + LOTLayerTypeUnknown +} LOTLayerType; + +typedef enum : NSInteger { + LOTMatteTypeNone, + LOTMatteTypeAdd, + LOTMatteTypeInvert, + LOTMatteTypeUnknown +} LOTMatteType; + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTLayer : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withFramerate:(NSNumber *)framerate; + +@property (nonatomic, readonly) NSString *layerName; +@property (nonatomic, readonly, nullable) NSString *referenceID; +@property (nonatomic, readonly) NSNumber *layerID; +@property (nonatomic, readonly) LOTLayerType layerType; +@property (nonatomic, readonly, nullable) NSNumber *parentID; +@property (nonatomic, readonly) NSNumber *startFrame; +@property (nonatomic, readonly) NSNumber *inFrame; +@property (nonatomic, readonly) NSNumber *outFrame; +@property (nonatomic, readonly) NSNumber *timeStretch; +@property (nonatomic, readonly) CGRect layerBounds; + +@property (nonatomic, readonly, nullable) NSArray *shapes; +@property (nonatomic, readonly, nullable) NSArray *masks; + +@property (nonatomic, readonly, nullable) NSNumber *layerWidth; +@property (nonatomic, readonly, nullable) NSNumber *layerHeight; +@property (nonatomic, readonly, nullable) UIColor *solidColor; +@property (nonatomic, readonly, nullable) LOTAsset *imageAsset; + +@property (nonatomic, readonly) LOTKeyframeGroup *opacity; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *timeRemapping; +@property (nonatomic, readonly) LOTKeyframeGroup *rotation; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *position; + +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *positionX; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *positionY; + +@property (nonatomic, readonly) LOTKeyframeGroup *anchor; +@property (nonatomic, readonly) LOTKeyframeGroup *scale; + +@property (nonatomic, readonly) LOTMatteType matteType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayer.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayer.m new file mode 100644 index 0000000..4b12f34 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayer.m @@ -0,0 +1,183 @@ +// +// LOTLayer.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTLayer.h" +#import "LOTAsset.h" +#import "LOTAssetGroup.h" +#import "LOTShapeGroup.h" +#import "LOTComposition.h" +#import "LOTHelpers.h" +#import "LOTMask.h" +#import "LOTHelpers.h" + +@implementation LOTLayer + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary + withAssetGroup:(LOTAssetGroup *)assetGroup + withFramerate:(NSNumber *)framerate { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary + withAssetGroup:assetGroup + withFramerate:framerate]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary + withAssetGroup:(LOTAssetGroup *)assetGroup + withFramerate:(NSNumber *)framerate { + + _layerName = [jsonDictionary[@"nm"] copy]; + _layerID = [jsonDictionary[@"ind"] copy]; + + NSNumber *layerType = jsonDictionary[@"ty"]; + _layerType = layerType.integerValue; + + if (jsonDictionary[@"refId"]) { + _referenceID = [jsonDictionary[@"refId"] copy]; + } + + _parentID = [jsonDictionary[@"parent"] copy]; + + if (jsonDictionary[@"st"]) { + _startFrame = [jsonDictionary[@"st"] copy]; + } + _inFrame = [jsonDictionary[@"ip"] copy]; + _outFrame = [jsonDictionary[@"op"] copy]; + + if (jsonDictionary[@"sr"]) { + _timeStretch = [jsonDictionary[@"sr"] copy]; + } else { + _timeStretch = @1; + } + + if (_layerType == LOTLayerTypePrecomp) { + _layerHeight = [jsonDictionary[@"h"] copy]; + _layerWidth = [jsonDictionary[@"w"] copy]; + [assetGroup buildAssetNamed:_referenceID withFramerate:framerate]; + } else if (_layerType == LOTLayerTypeImage) { + [assetGroup buildAssetNamed:_referenceID withFramerate:framerate]; + _imageAsset = [assetGroup assetModelForID:_referenceID]; + _layerWidth = [_imageAsset.assetWidth copy]; + _layerHeight = [_imageAsset.assetHeight copy]; + } else if (_layerType == LOTLayerTypeSolid) { + _layerWidth = jsonDictionary[@"sw"]; + _layerHeight = jsonDictionary[@"sh"]; + NSString *solidColor = jsonDictionary[@"sc"]; + _solidColor = [UIColor LOT_colorWithHexString:solidColor]; + } + + _layerBounds = CGRectMake(0, 0, _layerWidth.floatValue, _layerHeight.floatValue); + + NSDictionary *ks = jsonDictionary[@"ks"]; + + NSDictionary *opacity = ks[@"o"]; + if (opacity) { + _opacity = [[LOTKeyframeGroup alloc] initWithData:opacity]; + [_opacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSDictionary *timeRemap = jsonDictionary[@"tm"]; + if (timeRemap) { + _timeRemapping = [[LOTKeyframeGroup alloc] initWithData:timeRemap]; + [_timeRemapping remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return inValue * framerate.doubleValue; + }]; + } + + NSDictionary *rotation = ks[@"r"]; + if (rotation == nil) { + rotation = ks[@"rz"]; + } + if (rotation) { + _rotation = [[LOTKeyframeGroup alloc] initWithData:rotation]; + [_rotation remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_DegreesToRadians(inValue); + }]; + } + + NSDictionary *position = ks[@"p"]; + if ([position[@"s"] boolValue]) { + // Separate dimensions + _positionX = [[LOTKeyframeGroup alloc] initWithData:position[@"x"]]; + _positionY = [[LOTKeyframeGroup alloc] initWithData:position[@"y"]]; + } else { + _position = [[LOTKeyframeGroup alloc] initWithData:position ]; + } + + NSDictionary *anchor = ks[@"a"]; + if (anchor) { + _anchor = [[LOTKeyframeGroup alloc] initWithData:anchor]; + } + + NSDictionary *scale = ks[@"s"]; + if (scale) { + _scale = [[LOTKeyframeGroup alloc] initWithData:scale]; + [_scale remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, -100, 100, -1, 1); + }]; + } + + _matteType = [jsonDictionary[@"tt"] integerValue]; + + + NSMutableArray *masks = [NSMutableArray array]; + for (NSDictionary *maskJSON in jsonDictionary[@"masksProperties"]) { + LOTMask *mask = [[LOTMask alloc] initWithJSON:maskJSON]; + [masks addObject:mask]; + } + _masks = masks.count ? masks : nil; + + NSMutableArray *shapes = [NSMutableArray array]; + for (NSDictionary *shapeJSON in jsonDictionary[@"shapes"]) { + id shapeItem = [LOTShapeGroup shapeItemWithJSON:shapeJSON]; + if (shapeItem) { + [shapes addObject:shapeItem]; + } + } + _shapes = shapes; + + NSArray *effects = jsonDictionary[@"ef"]; + if (effects.count > 0) { + + NSDictionary *effectNames = @{ @0: @"slider", + @1: @"angle", + @2: @"color", + @3: @"point", + @4: @"checkbox", + @5: @"group", + @6: @"noValue", + @7: @"dropDown", + @9: @"customValue", + @10: @"layerIndex", + @20: @"tint", + @21: @"fill" }; + + for (NSDictionary *effect in effects) { + NSNumber *typeNumber = effect[@"ty"]; + NSString *name = effect[@"nm"]; + NSString *internalName = effect[@"mn"]; + NSString *typeString = effectNames[typeNumber]; + if (typeString) { + NSLog(@"%s: Warning: %@ effect not supported: %@ / %@", __PRETTY_FUNCTION__, typeString, internalName, name); + } + } + } +} + +- (NSString *)description { + NSMutableString *text = [[super description] mutableCopy]; + [text appendFormat:@" %@ id: %d pid: %d frames: %d-%d", _layerName, (int)_layerID.integerValue, (int)_parentID.integerValue, + (int)_inFrame.integerValue, (int)_outFrame.integerValue]; + return text; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayerGroup.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayerGroup.h new file mode 100644 index 0000000..f6952b5 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayerGroup.h @@ -0,0 +1,30 @@ +// +// LOTLayerGroup.h +// Pods +// +// Created by Brandon Withrow on 2/16/17. +// +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@class LOTLayer; +@class LOTAssetGroup; + +@interface LOTLayerGroup : NSObject + +- (instancetype)initWithLayerJSON:(NSArray *)layersJSON + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withFramerate:(NSNumber *)framerate; + +@property (nonatomic, readonly) NSArray *layers; + +- (LOTLayer *)layerModelForID:(NSNumber *)layerID; +- (LOTLayer *)layerForReferenceID:(NSString *)referenceID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayerGroup.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayerGroup.m new file mode 100644 index 0000000..81d38ba --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTLayerGroup.m @@ -0,0 +1,62 @@ +// +// LOTLayerGroup.m +// Pods +// +// Created by Brandon Withrow on 2/16/17. +// +// + +#import "LOTLayerGroup.h" +#import "LOTLayer.h" +#import "LOTAssetGroup.h" + +@implementation LOTLayerGroup { + NSDictionary *_modelMap; + NSDictionary *_referenceIDMap; +} + +- (instancetype)initWithLayerJSON:(NSArray *)layersJSON + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withFramerate:(NSNumber *)framerate { + self = [super init]; + if (self) { + [self _mapFromJSON:layersJSON withAssetGroup:assetGroup withFramerate:framerate]; + } + return self; +} + +- (void)_mapFromJSON:(NSArray *)layersJSON + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withFramerate:(NSNumber *)framerate { + + NSMutableArray *layers = [NSMutableArray array]; + NSMutableDictionary *modelMap = [NSMutableDictionary dictionary]; + NSMutableDictionary *referenceMap = [NSMutableDictionary dictionary]; + + for (NSDictionary *layerJSON in layersJSON) { + LOTLayer *layer = [[LOTLayer alloc] initWithJSON:layerJSON + withAssetGroup:assetGroup + withFramerate:framerate]; + [layers addObject:layer]; + if(layer.layerID) { + modelMap[layer.layerID] = layer; + } + if (layer.referenceID) { + referenceMap[layer.referenceID] = layer; + } + } + + _referenceIDMap = referenceMap; + _modelMap = modelMap; + _layers = layers; +} + +- (LOTLayer *)layerModelForID:(NSNumber *)layerID { + return _modelMap[layerID]; +} + +- (LOTLayer *)layerForReferenceID:(NSString *)referenceID { + return _referenceIDMap[referenceID]; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTMask.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTMask.h new file mode 100644 index 0000000..d60ff43 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTMask.h @@ -0,0 +1,29 @@ +// +// LOTMask.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +typedef enum : NSUInteger { + LOTMaskModeAdd, + LOTMaskModeSubtract, + LOTMaskModeIntersect, + LOTMaskModeUnknown +} LOTMaskMode; + +@interface LOTMask : NSObject + +- (instancetype _Nonnull)initWithJSON:(NSDictionary * _Nonnull)jsonDictionary; + +@property (nonatomic, readonly) BOOL closed; +@property (nonatomic, readonly) BOOL inverted; +@property (nonatomic, readonly) LOTMaskMode maskMode; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *maskPath; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *opacity; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *expansion; +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTMask.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTMask.m new file mode 100644 index 0000000..b67476f --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTMask.m @@ -0,0 +1,59 @@ +// +// LOTMask.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTMask.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTMask + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + NSNumber *closed = jsonDictionary[@"cl"]; + _closed = closed.boolValue; + + NSNumber *inverted = jsonDictionary[@"inv"]; + _inverted = inverted.boolValue; + + NSString *mode = jsonDictionary[@"mode"]; + if ([mode isEqualToString:@"a"]) { + _maskMode = LOTMaskModeAdd; + } else if ([mode isEqualToString:@"s"]) { + _maskMode = LOTMaskModeSubtract; + } else if ([mode isEqualToString:@"i"]) { + _maskMode = LOTMaskModeIntersect; + } else { + _maskMode = LOTMaskModeUnknown; + } + + NSDictionary *maskshape = jsonDictionary[@"pt"]; + if (maskshape) { + _maskPath = [[LOTKeyframeGroup alloc] initWithData:maskshape]; + } + + NSDictionary *opacity = jsonDictionary[@"o"]; + if (opacity) { + _opacity = [[LOTKeyframeGroup alloc] initWithData:opacity]; + [_opacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSDictionary *expansion = jsonDictionary[@"x"]; + if (expansion) { + _expansion = [[LOTKeyframeGroup alloc] initWithData:expansion]; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTModels.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTModels.h new file mode 100644 index 0000000..43bd5d6 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTModels.h @@ -0,0 +1,28 @@ +// +// LOTModels.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#ifndef LOTModels_h +#define LOTModels_h + +#import "LOTKeyframe.h" +#import "LOTComposition.h" +#import "LOTLayer.h" +#import "LOTMask.h" +#import "LOTShapeCircle.h" +#import "LOTShapeFill.h" +#import "LOTShapeGroup.h" +#import "LOTShapePath.h" +#import "LOTShapeRectangle.h" +#import "LOTShapeStroke.h" +#import "LOTShapeTransform.h" +#import "LOTShapeTrimPath.h" +#import "LOTLayerGroup.h" +#import "LOTAsset.h" +#import "LOTShapeGradientFill.h" + +#endif /* LOTModels_h */ diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeCircle.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeCircle.h new file mode 100644 index 0000000..9cb5c9a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeCircle.h @@ -0,0 +1,25 @@ +// +// LOTShapeCircle.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTShapeCircle : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) LOTKeyframeGroup *position; +@property (nonatomic, readonly) LOTKeyframeGroup *size; +@property (nonatomic, readonly) BOOL reversed; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeCircle.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeCircle.m new file mode 100644 index 0000000..806789f --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeCircle.m @@ -0,0 +1,40 @@ +// +// LOTShapeCircle.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTShapeCircle.h" + +@implementation LOTShapeCircle + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *position = jsonDictionary[@"p"]; + if (position) { + _position = [[LOTKeyframeGroup alloc] initWithData:position]; + } + + NSDictionary *size= jsonDictionary[@"s"]; + if (size) { + _size = [[LOTKeyframeGroup alloc] initWithData:size]; + } + NSNumber *reversed = jsonDictionary[@"d"]; + _reversed = (reversed.integerValue == 3); +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeFill.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeFill.h new file mode 100644 index 0000000..a676707 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeFill.h @@ -0,0 +1,26 @@ +// +// LOTShapeFill.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTShapeFill : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) BOOL fillEnabled; +@property (nonatomic, readonly) LOTKeyframeGroup *color; +@property (nonatomic, readonly) LOTKeyframeGroup *opacity; +@property (nonatomic, readonly) BOOL evenOddFillRule; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeFill.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeFill.m new file mode 100644 index 0000000..386b318 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeFill.m @@ -0,0 +1,52 @@ +// +// LOTShapeFill.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTShapeFill.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTShapeFill + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *color = jsonDictionary[@"c"]; + if (color) { + _color = [[LOTKeyframeGroup alloc] initWithData:color]; + } + + NSDictionary *opacity = jsonDictionary[@"o"]; + if (opacity) { + _opacity = [[LOTKeyframeGroup alloc] initWithData:opacity]; + [_opacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSNumber *evenOdd = jsonDictionary[@"r"]; + if (evenOdd.integerValue == 2) { + _evenOddFillRule = YES; + } else { + _evenOddFillRule = NO; + } + + NSNumber *fillEnabled = jsonDictionary[@"fillEnabled"]; + _fillEnabled = fillEnabled.boolValue; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGradientFill.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGradientFill.h new file mode 100644 index 0000000..3be49c3 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGradientFill.h @@ -0,0 +1,34 @@ +// +// LOTShapeGradientFill.h +// Lottie +// +// Created by brandon_withrow on 7/26/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef enum : NSUInteger { + LOTGradientTypeLinear, + LOTGradientTypeRadial +} LOTGradientType; + +@interface LOTShapeGradientFill : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) NSNumber *numberOfColors; +@property (nonatomic, readonly) LOTKeyframeGroup *startPoint; +@property (nonatomic, readonly) LOTKeyframeGroup *endPoint; +@property (nonatomic, readonly) LOTKeyframeGroup *gradient; +@property (nonatomic, readonly) LOTKeyframeGroup *opacity; +@property (nonatomic, readonly) BOOL evenOddFillRule; +@property (nonatomic, readonly) LOTGradientType type; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGradientFill.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGradientFill.m new file mode 100644 index 0000000..f4eeb13 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGradientFill.m @@ -0,0 +1,67 @@ +// +// LOTShapeGradientFill.m +// Lottie +// +// Created by brandon_withrow on 7/26/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTShapeGradientFill.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTShapeGradientFill + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSNumber *type = jsonDictionary[@"t"]; + + if (type.integerValue != 1) { + _type = LOTGradientTypeRadial; + } else { + _type = LOTGradientTypeLinear; + } + + NSDictionary *start = jsonDictionary[@"s"]; + if (start) { + _startPoint = [[LOTKeyframeGroup alloc] initWithData:start]; + } + + NSDictionary *end = jsonDictionary[@"e"]; + if (end) { + _endPoint = [[LOTKeyframeGroup alloc] initWithData:end]; + } + + NSDictionary *gradient = jsonDictionary[@"g"]; + if (gradient) { + NSDictionary *unwrappedGradient = gradient[@"k"]; + _numberOfColors = gradient[@"p"]; + _gradient = [[LOTKeyframeGroup alloc] initWithData:unwrappedGradient]; + } + + NSDictionary *opacity = jsonDictionary[@"o"]; + if (opacity) { + _opacity = [[LOTKeyframeGroup alloc] initWithData:opacity]; + [_opacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSNumber *evenOdd = jsonDictionary[@"r"]; + if (evenOdd.integerValue == 2) { + _evenOddFillRule = YES; + } else { + _evenOddFillRule = NO; + } +} +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGroup.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGroup.h new file mode 100644 index 0000000..4d65553 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGroup.h @@ -0,0 +1,21 @@ +// +// LOTShape.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import + +@interface LOTShapeGroup : NSObject + +- (instancetype _Nonnull)initWithJSON:(NSDictionary *_Nonnull)jsonDictionary; + +@property (nonatomic, readonly, nonnull) NSString *keyname; +@property (nonatomic, readonly, nonnull) NSArray *items; + ++ (id _Nullable)shapeItemWithJSON:(NSDictionary * _Nonnull)itemJSON; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGroup.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGroup.m new file mode 100644 index 0000000..ef445d0 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeGroup.m @@ -0,0 +1,102 @@ +// +// LOTShape.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTShapeGroup.h" +#import "LOTShapeFill.h" +#import "LOTShapePath.h" +#import "LOTShapeCircle.h" +#import "LOTShapeStroke.h" +#import "LOTShapeTransform.h" +#import "LOTShapeRectangle.h" +#import "LOTShapeTrimPath.h" +#import "LOTShapeGradientFill.h" +#import "LOTShapeStar.h" +#import "LOTShapeRepeater.h" + +@implementation LOTShapeGroup + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSArray *itemsJSON = jsonDictionary[@"it"]; + NSMutableArray *items = [NSMutableArray array]; + for (NSDictionary *itemJSON in itemsJSON) { + id newItem = [LOTShapeGroup shapeItemWithJSON:itemJSON]; + if (newItem) { + [items addObject:newItem]; + } + } + _items = items; +} + ++ (id)shapeItemWithJSON:(NSDictionary *)itemJSON { + NSString *type = itemJSON[@"ty"]; + if ([type isEqualToString:@"gr"]) { + LOTShapeGroup *group = [[LOTShapeGroup alloc] initWithJSON:itemJSON]; + return group; + } else if ([type isEqualToString:@"st"]) { + LOTShapeStroke *stroke = [[LOTShapeStroke alloc] initWithJSON:itemJSON]; + return stroke; + } else if ([type isEqualToString:@"fl"]) { + LOTShapeFill *fill = [[LOTShapeFill alloc] initWithJSON:itemJSON]; + return fill; + } else if ([type isEqualToString:@"tr"]) { + LOTShapeTransform *transform = [[LOTShapeTransform alloc] initWithJSON:itemJSON]; + return transform; + } else if ([type isEqualToString:@"sh"]) { + LOTShapePath *path = [[LOTShapePath alloc] initWithJSON:itemJSON]; + return path; + } else if ([type isEqualToString:@"el"]) { + LOTShapeCircle *circle = [[LOTShapeCircle alloc] initWithJSON:itemJSON]; + return circle; + } else if ([type isEqualToString:@"rc"]) { + LOTShapeRectangle *rectangle = [[LOTShapeRectangle alloc] initWithJSON:itemJSON]; + return rectangle; + } else if ([type isEqualToString:@"tm"]) { + LOTShapeTrimPath *trim = [[LOTShapeTrimPath alloc] initWithJSON:itemJSON]; + return trim; + } else if ([type isEqualToString:@"gs"]) { + NSLog(@"%s: Warning: gradient strokes are not supported", __PRETTY_FUNCTION__); + } else if ([type isEqualToString:@"gf"]) { + LOTShapeGradientFill *gradientFill = [[LOTShapeGradientFill alloc] initWithJSON:itemJSON]; + return gradientFill; + } else if ([type isEqualToString:@"sr"]) { + LOTShapeStar *star = [[LOTShapeStar alloc] initWithJSON:itemJSON]; + return star; + } else if ([type isEqualToString:@"mm"]) { + NSString *name = itemJSON[@"nm"]; + NSLog(@"%s: Warning: merge shape is not supported. name: %@", __PRETTY_FUNCTION__, name); + } else if ([type isEqualToString:@"rp"]) { + LOTShapeRepeater *repeater = [[LOTShapeRepeater alloc] initWithJSON:itemJSON]; + return repeater; + } else { + NSString *name = itemJSON[@"nm"]; + NSLog(@"%s: Unsupported shape: %@ name: %@", __PRETTY_FUNCTION__, type, name); + } + + return nil; +} + +- (NSString *)description { + NSMutableString *text = [[super description] mutableCopy]; + [text appendFormat:@" items: %@", self.items]; + return text; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapePath.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapePath.h new file mode 100644 index 0000000..c27e3dc --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapePath.h @@ -0,0 +1,21 @@ +// +// LOTShapePath.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +@interface LOTShapePath : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) BOOL closed; +@property (nonatomic, readonly) NSNumber *index; +@property (nonatomic, readonly) LOTKeyframeGroup *shapePath; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapePath.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapePath.m new file mode 100644 index 0000000..b41be6a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapePath.m @@ -0,0 +1,35 @@ +// +// LOTShapePath.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTShapePath.h" + +@implementation LOTShapePath + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + _index = jsonDictionary[@"ind"]; + _closed = [jsonDictionary[@"closed"] boolValue]; + NSDictionary *shape = jsonDictionary[@"ks"]; + if (shape) { + _shapePath = [[LOTKeyframeGroup alloc] initWithData:shape]; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRectangle.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRectangle.h new file mode 100644 index 0000000..3845b7d --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRectangle.h @@ -0,0 +1,22 @@ +// +// LOTShapeRectangle.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +@interface LOTShapeRectangle : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) LOTKeyframeGroup *position; +@property (nonatomic, readonly) LOTKeyframeGroup *size; +@property (nonatomic, readonly) LOTKeyframeGroup *cornerRadius; +@property (nonatomic, readonly) BOOL reversed; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRectangle.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRectangle.m new file mode 100644 index 0000000..ce05e06 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRectangle.m @@ -0,0 +1,45 @@ +// +// LOTShapeRectangle.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTShapeRectangle.h" + +@implementation LOTShapeRectangle + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *position = jsonDictionary[@"p"]; + if (position) { + _position = [[LOTKeyframeGroup alloc] initWithData:position]; + } + + NSDictionary *cornerRadius = jsonDictionary[@"r"]; + if (cornerRadius) { + _cornerRadius = [[LOTKeyframeGroup alloc] initWithData:cornerRadius]; + } + + NSDictionary *size = jsonDictionary[@"s"]; + if (size) { + _size = [[LOTKeyframeGroup alloc] initWithData:size]; + } + NSNumber *reversed = jsonDictionary[@"d"]; + _reversed = (reversed.integerValue == 3); +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRepeater.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRepeater.h new file mode 100644 index 0000000..b557c5c --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRepeater.h @@ -0,0 +1,30 @@ +// +// LOTShapeRepeater.h +// Lottie +// +// Created by brandon_withrow on 7/28/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTShapeRepeater : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *copies; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *offset; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *anchorPoint; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *scale; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *position; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *rotation; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *startOpacity; +@property (nonatomic, readonly, nullable) LOTKeyframeGroup *endOpacity; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRepeater.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRepeater.m new file mode 100644 index 0000000..467e5e8 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeRepeater.m @@ -0,0 +1,83 @@ +// +// LOTShapeRepeater.m +// Lottie +// +// Created by brandon_withrow on 7/28/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTShapeRepeater.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTShapeRepeater + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *copies = jsonDictionary[@"c"]; + if (copies) { + _copies = [[LOTKeyframeGroup alloc] initWithData:copies]; + } + + NSDictionary *offset = jsonDictionary[@"o"]; + if (offset) { + _offset = [[LOTKeyframeGroup alloc] initWithData:offset]; + } + + NSDictionary *transform = jsonDictionary[@"tr"]; + + NSDictionary *rotation = transform[@"r"]; + if (rotation) { + _rotation = [[LOTKeyframeGroup alloc] initWithData:rotation]; + [_rotation remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_DegreesToRadians(inValue); + }]; + } + + NSDictionary *startOpacity = transform[@"so"]; + if (startOpacity) { + _startOpacity = [[LOTKeyframeGroup alloc] initWithData:startOpacity]; + [_startOpacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSDictionary *endOpacity = transform[@"eo"]; + if (endOpacity) { + _endOpacity = [[LOTKeyframeGroup alloc] initWithData:endOpacity]; + [_endOpacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSDictionary *anchorPoint = transform[@"a"]; + if (anchorPoint) { + _anchorPoint = [[LOTKeyframeGroup alloc] initWithData:anchorPoint]; + } + + NSDictionary *position = transform[@"p"]; + if (position) { + _position = [[LOTKeyframeGroup alloc] initWithData:position]; + } + + NSDictionary *scale = transform[@"s"]; + if (scale) { + _scale = [[LOTKeyframeGroup alloc] initWithData:scale]; + [_scale remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, -100, 100, -1, 1); + }]; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStar.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStar.h new file mode 100644 index 0000000..5bbba0f --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStar.h @@ -0,0 +1,35 @@ +// +// LOTShapeStar.h +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +typedef enum : NSUInteger { + LOTPolystarShapeNone, + LOTPolystarShapeStar, + LOTPolystarShapePolygon +} LOTPolystarShape; + +@interface LOTShapeStar : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) LOTKeyframeGroup *outerRadius; +@property (nonatomic, readonly) LOTKeyframeGroup *outerRoundness; + +@property (nonatomic, readonly) LOTKeyframeGroup *innerRadius; +@property (nonatomic, readonly) LOTKeyframeGroup *innerRoundness; + +@property (nonatomic, readonly) LOTKeyframeGroup *position; +@property (nonatomic, readonly) LOTKeyframeGroup *numberOfPoints; +@property (nonatomic, readonly) LOTKeyframeGroup *rotation; + +@property (nonatomic, readonly) LOTPolystarShape type; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStar.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStar.m new file mode 100644 index 0000000..db589e7 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStar.m @@ -0,0 +1,66 @@ +// +// LOTShapeStar.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTShapeStar.h" + +@implementation LOTShapeStar + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *outerRadius = jsonDictionary[@"or"]; + if (outerRadius) { + _outerRadius = [[LOTKeyframeGroup alloc] initWithData:outerRadius]; + } + + NSDictionary *outerRoundness = jsonDictionary[@"os"]; + if (outerRoundness) { + _outerRoundness = [[LOTKeyframeGroup alloc] initWithData:outerRoundness]; + } + + NSDictionary *innerRadius = jsonDictionary[@"ir"]; + if (innerRadius) { + _innerRadius = [[LOTKeyframeGroup alloc] initWithData:innerRadius]; + } + + NSDictionary *innerRoundness = jsonDictionary[@"is"]; + if (innerRoundness) { + _innerRoundness = [[LOTKeyframeGroup alloc] initWithData:innerRoundness]; + } + + NSDictionary *position = jsonDictionary[@"p"]; + if (position) { + _position = [[LOTKeyframeGroup alloc] initWithData:position]; + } + + NSDictionary *numberOfPoints = jsonDictionary[@"pt"]; + if (numberOfPoints) { + _numberOfPoints = [[LOTKeyframeGroup alloc] initWithData:numberOfPoints]; + } + + NSDictionary *rotation = jsonDictionary[@"r"]; + if (rotation) { + _rotation = [[LOTKeyframeGroup alloc] initWithData:rotation]; + } + + NSNumber *type = jsonDictionary[@"sy"]; + _type = type.integerValue; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStroke.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStroke.h new file mode 100644 index 0000000..2d1ae6a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStroke.h @@ -0,0 +1,39 @@ +// +// LOTShapeStroke.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +typedef enum : NSUInteger { + LOTLineCapTypeButt, + LOTLineCapTypeRound, + LOTLineCapTypeUnknown +} LOTLineCapType; + +typedef enum : NSUInteger { + LOTLineJoinTypeMiter, + LOTLineJoinTypeRound, + LOTLineJoinTypeBevel +} LOTLineJoinType; + +@interface LOTShapeStroke : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) BOOL fillEnabled; +@property (nonatomic, readonly) LOTKeyframeGroup *color; +@property (nonatomic, readonly) LOTKeyframeGroup *opacity; +@property (nonatomic, readonly) LOTKeyframeGroup *width; +@property (nonatomic, readonly) LOTKeyframeGroup *dashOffset; +@property (nonatomic, readonly) LOTLineCapType capType; +@property (nonatomic, readonly) LOTLineJoinType joinType; + +@property (nonatomic, readonly) NSArray *lineDashPattern; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStroke.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStroke.m new file mode 100644 index 0000000..27ff544 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeStroke.m @@ -0,0 +1,73 @@ +// +// LOTShapeStroke.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTShapeStroke.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTShapeStroke + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *color = jsonDictionary[@"c"]; + if (color) { + _color = [[LOTKeyframeGroup alloc] initWithData:color]; + } + + NSDictionary *width = jsonDictionary[@"w"]; + if (width) { + _width = [[LOTKeyframeGroup alloc] initWithData:width]; + } + + NSDictionary *opacity = jsonDictionary[@"o"]; + if (opacity) { + _opacity = [[LOTKeyframeGroup alloc] initWithData:opacity]; + [_opacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + _capType = [jsonDictionary[@"lc"] integerValue] - 1; + _joinType = [jsonDictionary[@"lj"] integerValue] - 1; + + NSNumber *fillEnabled = jsonDictionary[@"fillEnabled"]; + _fillEnabled = fillEnabled.boolValue; + + NSDictionary *dashOffset = nil; + NSArray *dashes = jsonDictionary[@"d"]; + if (dashes) { + NSMutableArray *dashPattern = [NSMutableArray array]; + for (NSDictionary *dash in dashes) { + if ([dash[@"n"] isEqualToString:@"o"]) { + dashOffset = dash[@"v"]; + continue; + } + // TODO DASH PATTERNS + NSDictionary *value = dash[@"v"]; + LOTKeyframeGroup *keyframeGroup = [[LOTKeyframeGroup alloc] initWithData:value]; + [dashPattern addObject:keyframeGroup]; + } + _lineDashPattern = dashPattern; + } + if (dashOffset) { + _dashOffset = [[LOTKeyframeGroup alloc] initWithData:dashOffset]; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTransform.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTransform.h new file mode 100644 index 0000000..8bde1ad --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTransform.h @@ -0,0 +1,25 @@ +// +// LOTShapeTransform.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import +#import +#import "LOTKeyframe.h" + +@interface LOTShapeTransform : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) LOTKeyframeGroup *position; +@property (nonatomic, readonly) LOTKeyframeGroup *anchor; +@property (nonatomic, readonly) LOTKeyframeGroup *scale; +@property (nonatomic, readonly) LOTKeyframeGroup *rotation; +@property (nonatomic, readonly) LOTKeyframeGroup *opacity; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTransform.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTransform.m new file mode 100644 index 0000000..561d9de --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTransform.m @@ -0,0 +1,78 @@ +// +// LOTShapeTransform.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/15/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTShapeTransform.h" +#import "LOTHelpers.h" + +@implementation LOTShapeTransform + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *position = jsonDictionary[@"p"]; + if (position) { + _position = [[LOTKeyframeGroup alloc] initWithData:position]; + } + + NSDictionary *anchor = jsonDictionary[@"a"]; + if (anchor) { + _anchor = [[LOTKeyframeGroup alloc] initWithData:anchor]; + } + + NSDictionary *scale = jsonDictionary[@"s"]; + if (scale) { + _scale = [[LOTKeyframeGroup alloc] initWithData:scale]; + [_scale remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, -100, 100, -1, 1); + }]; + } + + NSDictionary *rotation = jsonDictionary[@"r"]; + if (rotation) { + _rotation = [[LOTKeyframeGroup alloc] initWithData:rotation]; + [_rotation remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_DegreesToRadians(inValue); + }]; + } + + NSDictionary *opacity = jsonDictionary[@"o"]; + if (opacity) { + _opacity = [[LOTKeyframeGroup alloc] initWithData:opacity]; + [_opacity remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSString *name = jsonDictionary[@"nm"]; + + NSDictionary *skew = jsonDictionary[@"sk"]; + BOOL hasSkew = (skew && [skew[@"k"] isEqual:@0] == NO); + NSDictionary *skewAxis = jsonDictionary[@"sa"]; + BOOL hasSkewAxis = (skewAxis && [skewAxis[@"k"] isEqual:@0] == NO); + + if (hasSkew || hasSkewAxis) { + NSLog(@"%s: Warning: skew is not supported: %@", __PRETTY_FUNCTION__, name); + } +} + +- (NSString *)description { + return [NSString stringWithFormat:@"LOTShapeTransform \"Position: %@ Anchor: %@ Scale: %@ Rotation: %@ Opacity: %@\"", _position.description, _anchor.description, _scale.description, _rotation.description, _opacity.description]; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTrimPath.h b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTrimPath.h new file mode 100644 index 0000000..b124890 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTrimPath.h @@ -0,0 +1,21 @@ +// +// LOTShapeTrimPath.h +// LottieAnimator +// +// Created by brandon_withrow on 7/26/16. +// Copyright © 2016 Brandon Withrow. All rights reserved. +// + +#import +#import "LOTKeyframe.h" + +@interface LOTShapeTrimPath : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; + +@property (nonatomic, readonly) NSString *keyname; +@property (nonatomic, readonly) LOTKeyframeGroup *start; +@property (nonatomic, readonly) LOTKeyframeGroup *end; +@property (nonatomic, readonly) LOTKeyframeGroup *offset; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTrimPath.m b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTrimPath.m new file mode 100644 index 0000000..8bef724 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Models/LOTShapeTrimPath.m @@ -0,0 +1,43 @@ +// +// LOTShapeTrimPath.m +// LottieAnimator +// +// Created by brandon_withrow on 7/26/16. +// Copyright © 2016 Brandon Withrow. All rights reserved. +// + +#import "LOTShapeTrimPath.h" + +@implementation LOTShapeTrimPath + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { + + if (jsonDictionary[@"nm"] ) { + _keyname = [jsonDictionary[@"nm"] copy]; + } + + NSDictionary *start = jsonDictionary[@"s"]; + if (start) { + _start = [[LOTKeyframeGroup alloc] initWithData:start]; + } + + NSDictionary *end = jsonDictionary[@"e"]; + if (end) { + _end = [[LOTKeyframeGroup alloc] initWithData:end]; + } + + NSDictionary *offset = jsonDictionary[@"o"]; + if (offset) { + _offset = [[LOTKeyframeGroup alloc] initWithData:offset]; + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimatedControl.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimatedControl.m new file mode 100644 index 0000000..7d5efbf --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimatedControl.m @@ -0,0 +1,140 @@ +// +// LOTAnimatedControl.m +// Lottie +// +// Created by brandon_withrow on 8/25/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatedControl.h" +#import "LOTAnimationView_Internal.h" + +@implementation LOTAnimatedControl { + UIControlState _priorState; + NSMutableDictionary *_layerMap; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self _commonInit]; + } + return self; +} + +- (void)_commonInit { + _animationView = [[LOTAnimationView alloc] init]; + _animationView.contentMode = UIViewContentModeScaleAspectFit; + _animationView.userInteractionEnabled = NO; + [self addSubview:_animationView]; + _layerMap = [NSMutableDictionary dictionary]; +} + +- (LOTComposition *)animationComp { + return _animationView.sceneModel; +} + +- (void)setAnimationComp:(LOTComposition *)animationComp { + [_animationView setSceneModel:animationComp]; + [self checkStateChangedAndUpdate:YES]; +} + +- (void)setLayerName:(NSString * _Nonnull)layerName forState:(UIControlState)state { + _layerMap[@(state)] = layerName; + [self checkStateChangedAndUpdate:YES]; +} + +#pragma mark - Setter Overrides + +- (void)setEnabled:(BOOL)enabled { + _priorState = self.state; + [super setEnabled:enabled]; + [self checkStateChangedAndUpdate:NO]; +} + +- (void)setSelected:(BOOL)selected { + _priorState = self.state; + [super setSelected:selected]; + [self checkStateChangedAndUpdate:NO]; +} + +- (void)setHighlighted:(BOOL)highlighted { + _priorState = self.state; + [super setHighlighted:highlighted]; + [self checkStateChangedAndUpdate:NO]; +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + _priorState = self.state; + [super touchesBegan:touches withEvent:event]; + [self checkStateChangedAndUpdate:NO]; +} + +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { + _priorState = self.state; + [super touchesMoved:touches withEvent:event]; + [self checkStateChangedAndUpdate:NO]; +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + _priorState = self.state; + [super touchesEnded:touches withEvent:event]; + [self checkStateChangedAndUpdate:NO]; +} + +- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { + _priorState = self.state; + [super touchesCancelled:touches withEvent:event]; + [self checkStateChangedAndUpdate:NO]; +} + +- (CGSize)intrinsicContentSize { + return _animationView.intrinsicContentSize; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + _animationView.frame = self.bounds; +} + +- (UIAccessibilityTraits)accessibilityTraits { + return UIAccessibilityTraitButton; +} + +- (BOOL)isAccessibilityElement +{ + return YES; +} + +#pragma mark - Private interface implementation + +- (void)checkStateChangedAndUpdate:(BOOL)forceUpdate { + if (self.state == _priorState && !forceUpdate) { + return; + } + _priorState = self.state; + + NSString *name = _layerMap[@(self.state)]; + if (!name) { + return; + } + CALayer *layer = [_animationView layerForKey:name]; + if (!layer) { + return; + } + + for (CALayer *child in [_animationView compositionLayers]) { + child.hidden = YES; + } + layer.hidden = NO; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimatedSwitch.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimatedSwitch.m new file mode 100644 index 0000000..b6e3b23 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimatedSwitch.m @@ -0,0 +1,199 @@ +// +// LOTAnimatedSwitch.m +// Lottie +// +// Created by brandon_withrow on 8/25/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatedSwitch.h" +#import "LOTAnimationView.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTAnimatedSwitch { + CGFloat _onStartProgress; + CGFloat _onEndProgress; + CGFloat _offStartProgress; + CGFloat _offEndProgress; + CGPoint _touchTrackingStart; + BOOL _on; + BOOL _suppressToggle; + BOOL _toggleToState; +} + +/// Convenience method to initialize a control from the Main Bundle by name ++ (instancetype _Nonnull)switchNamed:(NSString * _Nonnull)toggleName { + return [self switchNamed:toggleName inBundle:[NSBundle mainBundle]]; +} + +/// Convenience method to initialize a control from the specified bundle by name ++ (instancetype _Nonnull)switchNamed:(NSString * _Nonnull)toggleName inBundle:(NSBundle * _Nonnull)bundle { + LOTComposition *composition = [LOTComposition animationNamed:toggleName inBundle:bundle]; + LOTAnimatedSwitch *animatedControl = [[self alloc] initWithFrame:CGRectZero]; + if (composition) { + [animatedControl setAnimationComp:composition]; + animatedControl.bounds = composition.compBounds; + } + return animatedControl; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.accessibilityHint = NSLocalizedString(@"Double tap to toggle setting.", @"Double tap to toggle setting."); + _onStartProgress = 0; + _onEndProgress = 1; + _offStartProgress = 1; + _offEndProgress = 0; + _on = NO; + [self addTarget:self action:@selector(_toggle) forControlEvents:UIControlEventTouchUpInside]; + } + return self; +} + +- (void)setAnimationComp:(LOTComposition *)animationComp { + [super setAnimationComp:animationComp]; + [self setOn:_on animated:NO]; +} + +#pragma mark - External Methods + +- (void)setProgressRangeForOnState:(CGFloat)fromProgress toProgress:(CGFloat)toProgress { + _onStartProgress = fromProgress; + _onEndProgress = toProgress; + [self setOn:_on animated:NO]; +} + +- (void)setProgressRangeForOffState:(CGFloat)fromProgress toProgress:(CGFloat)toProgress { + _offStartProgress = fromProgress; + _offEndProgress = toProgress; + [self setOn:_on animated:NO]; +} + +- (void)setOn:(BOOL)on { + [self setOn:on animated:NO]; +} + +- (void)setOn:(BOOL)on animated:(BOOL)animated { + _on = on; + + CGFloat startProgress = on ? _onStartProgress : _offStartProgress; + CGFloat endProgress = on ? _onEndProgress : _offEndProgress; + CGFloat finalProgress = endProgress; + if (self.animationView.animationProgress < MIN(startProgress, endProgress) || + self.animationView.animationProgress > MAX(startProgress, endProgress)) { + if (self.animationView.animationProgress != (!_on ? _onEndProgress : _offEndProgress)) { + // Current progress is in the wrong timeline. Switch. + endProgress = on ? _offStartProgress : _onStartProgress; + startProgress = on ? _offEndProgress : _onEndProgress; + } + } + + if (finalProgress == self.animationView.animationProgress) { + return; + } + + if (animated) { + [self.animationView pause]; + [self.animationView playFromProgress:startProgress toProgress:endProgress withCompletion:^(BOOL animationFinished) { + if (animationFinished) { + self.animationView.animationProgress = finalProgress; + } + }]; + } else { + self.animationView.animationProgress = endProgress; + } +} + +- (NSString *)accessibilityValue { + return self.isOn ? NSLocalizedString(@"On", @"On") : NSLocalizedString(@"Off", @"Off"); +} + +#pragma mark - Internal Methods + +- (void)_toggle { + if (!_suppressToggle) { + [self _toggleAndSendActions]; + } +} + +- (void)_toggleAndSendActions { + if (self.isEnabled) { + #ifndef TARGET_OS_TV + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) { + UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight]; + [generator impactOccurred]; + } + #endif + [self setOn:!_on animated:YES]; + [self sendActionsForControlEvents:UIControlEventValueChanged]; + } +} + +- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { + [super beginTrackingWithTouch:touch withEvent:event]; + _suppressToggle = NO; + _touchTrackingStart = [touch locationInView:self]; + return YES; +} + +- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { + BOOL superContinue = [super continueTrackingWithTouch:touch withEvent:event]; + if (!_interactiveGesture) { + return superContinue; + } + CGPoint location = [touch locationInView:self]; + CGFloat diff = location.x - _touchTrackingStart.x; + if (LOT_PointDistanceFromPoint(_touchTrackingStart, location) > self.bounds.size.width * 0.25) { + // The touch has moved enough to register as its own gesture. Suppress the touch up toggle. + _suppressToggle = YES; + } +#ifdef __IPHONE_11_0 + // Xcode 9+ + if (@available(iOS 9.0, *)) { +#else + // Xcode 8- + if ([UIView respondsToSelector:@selector(userInterfaceLayoutDirectionForSemanticContentAttribute:)]) { +#endif + if ([UIView userInterfaceLayoutDirectionForSemanticContentAttribute:self.semanticContentAttribute] == UIUserInterfaceLayoutDirectionRightToLeft) { + diff = diff * -1; + } + } + if (_on) { + diff = diff * -1; + if (diff <= 0) { + self.animationView.animationProgress = _onEndProgress; + _toggleToState = YES; + } else { + diff = MAX(MIN(self.bounds.size.width, diff), 0); + self.animationView.animationProgress = LOT_RemapValue(diff, 0, self.bounds.size.width, _offStartProgress, _offEndProgress); + _toggleToState = (diff / self.bounds.size.width) > 0.5 ? NO : YES; + } + } else { + if (diff <= 0) { + self.animationView.animationProgress = _offEndProgress; + _toggleToState = NO; + } else { + diff = MAX(MIN(self.bounds.size.width, diff), 0); + self.animationView.animationProgress = LOT_RemapValue(diff, 0, self.bounds.size.width, _onStartProgress, _onEndProgress); + _toggleToState = (diff / self.bounds.size.width) > 0.5 ? YES : NO; + } + } + return YES; +} + +- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { + [super endTrackingWithTouch:touch withEvent:event]; + if (!_interactiveGesture) { + return; + } + if (_suppressToggle) { + if (_toggleToState != _on) { + [self _toggleAndSendActions]; + } else { + [self setOn:_toggleToState animated:YES]; + } + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationCache.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationCache.m new file mode 100644 index 0000000..2d8a460 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationCache.m @@ -0,0 +1,73 @@ +// +// LOTAnimationCache.m +// Lottie +// +// Created by Brandon Withrow on 1/9/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import "LOTAnimationCache.h" + +const NSInteger kLOTCacheSize = 50; + +@implementation LOTAnimationCache { + NSMutableDictionary *animationsCache_; + NSMutableArray *lruOrderArray_; +} + ++ (instancetype)sharedCache { + static LOTAnimationCache *sharedCache = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedCache = [[self alloc] init]; + }); + return sharedCache; +} + +- (instancetype)init { + self = [super init]; + if (self) { + animationsCache_ = [[NSMutableDictionary alloc] init]; + lruOrderArray_ = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)addAnimation:(LOTComposition *)animation forKey:(NSString *)key { + if (lruOrderArray_.count >= kLOTCacheSize) { + NSString *oldKey = lruOrderArray_[0]; + [animationsCache_ removeObjectForKey:oldKey]; + [lruOrderArray_ removeObject:oldKey]; + } + [lruOrderArray_ removeObject:key]; + [lruOrderArray_ addObject:key]; + [animationsCache_ setObject:animation forKey:key]; +} + +- (LOTComposition *)animationForKey:(NSString *)key { + if (!key) { + return nil; + } + LOTComposition *animation = [animationsCache_ objectForKey:key]; + [lruOrderArray_ removeObject:key]; + [lruOrderArray_ addObject:key]; + return animation; +} + +- (void)clearCache { + [animationsCache_ removeAllObjects]; + [lruOrderArray_ removeAllObjects]; +} + +- (void)removeAnimationForKey:(NSString *)key { + [lruOrderArray_ removeObject:key]; + [animationsCache_ removeObjectForKey:key]; +} + +- (void)disableCaching { + [self clearCache]; + animationsCache_ = nil; + lruOrderArray_ = nil; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationTransitionController.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationTransitionController.m new file mode 100644 index 0000000..1d36fe5 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationTransitionController.m @@ -0,0 +1,127 @@ +// +// LOTAnimationTransitionController.m +// Lottie +// +// Created by Brandon Withrow on 1/18/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import "LOTAnimationTransitionController.h" +#import "LOTAnimationView.h" + +@implementation LOTAnimationTransitionController { + LOTAnimationView *transitionAnimationView_; + NSString *fromLayerName_; + NSString *toLayerName_; + NSBundle *inBundle_; + BOOL _applyTransform; +} + +- (nonnull instancetype)initWithAnimationNamed:(nonnull NSString *)animation + fromLayerNamed:(nullable NSString *)fromLayer + toLayerNamed:(nullable NSString *)toLayer + applyAnimationTransform:(BOOL)applyAnimationTransform { + + return [self initWithAnimationNamed:animation + fromLayerNamed:fromLayer + toLayerNamed:toLayer + applyAnimationTransform:applyAnimationTransform + inBundle:[NSBundle mainBundle]]; +} + +- (instancetype)initWithAnimationNamed:(NSString *)animation + fromLayerNamed:(NSString *)fromLayer + toLayerNamed:(NSString *)toLayer + applyAnimationTransform:(BOOL)applyAnimationTransform + inBundle:(NSBundle *)bundle { + self = [super init]; + if (self) { + transitionAnimationView_ = [LOTAnimationView animationNamed:animation inBundle:bundle]; + fromLayerName_ = fromLayer; + toLayerName_ = toLayer; + _applyTransform = applyAnimationTransform; + } + return self; +} + +- (NSTimeInterval)transitionDuration:(id)transitionContext { + return transitionAnimationView_.animationDuration; +} + +- (void)animateTransition:(id)transitionContext { + UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; + UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; + UIView *containerView = transitionContext.containerView; + + UIView *toSnapshot = [toVC.view resizableSnapshotViewFromRect:containerView.bounds + afterScreenUpdates:YES + withCapInsets:UIEdgeInsetsZero]; + toSnapshot.frame = containerView.bounds; + + UIView *fromSnapshot = [fromVC.view resizableSnapshotViewFromRect:containerView.bounds + afterScreenUpdates:NO + withCapInsets:UIEdgeInsetsZero]; + fromSnapshot.frame = containerView.bounds; + + transitionAnimationView_.frame = containerView.bounds; + transitionAnimationView_.contentMode = UIViewContentModeScaleAspectFill; + [containerView addSubview:transitionAnimationView_]; + + BOOL crossFadeViews = NO; + + if (toLayerName_.length) { + LOTKeypath *toKeypath = [LOTKeypath keypathWithString:toLayerName_]; + CGRect convertedBounds = [transitionAnimationView_ convertRect:containerView.bounds toKeypathLayer:toKeypath]; + toSnapshot.frame = convertedBounds; + if (_applyTransform) { + [transitionAnimationView_ addSubview:toSnapshot toKeypathLayer:toKeypath]; + } else { + [transitionAnimationView_ maskSubview:toSnapshot toKeypathLayer:toKeypath]; + } + } else { + [containerView addSubview:toSnapshot]; + [containerView sendSubviewToBack:toSnapshot]; + toSnapshot.alpha = 0; + crossFadeViews = YES; + } + + if (fromLayerName_.length) { + LOTKeypath *fromKeypath = [LOTKeypath keypathWithString:fromLayerName_]; + CGRect convertedBounds = [transitionAnimationView_ convertRect:containerView.bounds fromKeypathLayer:fromKeypath]; + fromSnapshot.frame = convertedBounds; + if (_applyTransform) { + [transitionAnimationView_ addSubview:fromSnapshot toKeypathLayer:fromKeypath]; + } else { + [transitionAnimationView_ maskSubview:fromSnapshot toKeypathLayer:fromKeypath]; + } + } else { + [containerView addSubview:fromSnapshot]; + [containerView sendSubviewToBack:fromSnapshot]; + } + + [containerView addSubview:toVC.view]; + toVC.view.hidden = YES; + + if (crossFadeViews) { + CGFloat duration = transitionAnimationView_.animationDuration * 0.25; + CGFloat delay = (transitionAnimationView_.animationDuration - duration) / 2.f; + + [UIView animateWithDuration:duration + delay:delay + options:(UIViewAnimationOptionCurveEaseInOut) + animations:^{ + toSnapshot.alpha = 1; + } completion:^(BOOL finished) { + + }]; + } + + [transitionAnimationView_ playWithCompletion:^(BOOL animationFinished) { + toVC.view.hidden = false; + [self->transitionAnimationView_ removeFromSuperview]; + [transitionContext completeTransition:animationFinished]; + }]; +} + +@end + diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationView.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationView.m new file mode 100644 index 0000000..484aa04 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationView.m @@ -0,0 +1,916 @@ +// +// LOTAnimationView +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTAnimationView.h" +#import "LOTPlatformCompat.h" +#import "LOTModels.h" +#import "LOTHelpers.h" +#import "LOTAnimationView_Internal.h" +#import "LOTAnimationCache.h" +#import "LOTCompositionContainer.h" + +#define kCompContainerTransformKey @"compContainerTransformKey" +#define kCompContainerPositionKey @"compContainerPositionKey" + +static NSString * const kCompContainerAnimationKey = @"play"; + +@implementation LOTAnimationView { + LOTCompositionContainer *_compContainer; + NSNumber *_playRangeStartFrame; + NSNumber *_playRangeEndFrame; + CGFloat _playRangeStartProgress; + CGFloat _playRangeEndProgress; + NSBundle *_bundle; + CGFloat _animationProgress; + // Properties for tracking automatic restoration of animation. + BOOL _shouldRestoreStateWhenAttachedToWindow; + LOTAnimationCompletionBlock _completionBlockToRestoreWhenAttachedToWindow; +} + +# pragma mark - Convenience Initializers + ++ (nonnull instancetype)animationNamed:(nonnull NSString *)animationName { + return [self animationNamed:animationName inBundle:[NSBundle mainBundle]]; +} + ++ (nonnull instancetype)animationNamed:(nonnull NSString *)animationName inBundle:(nonnull NSBundle *)bundle { + LOTComposition *comp = [LOTComposition animationNamed:animationName inBundle:bundle]; + return [[self alloc] initWithModel:comp inBundle:bundle]; +} + ++ (nonnull instancetype)animationFromJSON:(nonnull NSDictionary *)animationJSON { + return [self animationFromJSON:animationJSON inBundle:[NSBundle mainBundle]]; +} + ++ (nonnull instancetype)animationFromJSON:(nullable NSDictionary *)animationJSON inBundle:(nullable NSBundle *)bundle { + LOTComposition *comp = [LOTComposition animationFromJSON:animationJSON inBundle:bundle]; + return [[self alloc] initWithModel:comp inBundle:bundle]; +} + ++ (nonnull instancetype)animationWithFilePath:(nonnull NSString *)filePath { + LOTComposition *comp = [LOTComposition animationWithFilePath:filePath]; + return [[self alloc] initWithModel:comp inBundle:[NSBundle mainBundle]]; +} + +# pragma mark - Initializers + +- (instancetype)initWithContentsOfURL:(NSURL *)url { + return [self initWithContentsOfURL:url errorBlock:nil]; +} + +- (instancetype)initWithContentsOfURL:(NSURL *)url + errorBlock:(nullable LOTInitializationErrorBlock)errorBlock { + self = [self initWithFrame:CGRectZero]; + if (self) { + LOTComposition *laScene = [[LOTAnimationCache sharedCache] animationForKey:url.absoluteString]; + if (laScene) { + laScene.cacheKey = url.absoluteString; + [self _initializeAnimationContainer]; + [self _setupWithSceneModel:laScene]; + } else { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { + NSError *error; + NSData *animationData = [NSData dataWithContentsOfURL:url options:0 error:&error]; + if (error || !animationData) { + if (errorBlock) { + errorBlock(error); + } + return; + } + NSDictionary *animationJSON = [NSJSONSerialization JSONObjectWithData:animationData + options:0 error:&error]; + if (error || !animationJSON) { + if (errorBlock) { + errorBlock(error); + } + return; + } + + LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:animationJSON withAssetBundle:[NSBundle mainBundle]]; + dispatch_async(dispatch_get_main_queue(), ^(void) { + [[LOTAnimationCache sharedCache] addAnimation:laScene forKey:url.absoluteString]; + laScene.cacheKey = url.absoluteString; + [self _initializeAnimationContainer]; + [self _setupWithSceneModel:laScene]; + }); + }); + } + } + return self; +} + +- (instancetype)initWithModel:(LOTComposition *)model inBundle:(NSBundle *)bundle { + self = [self initWithFrame:model.compBounds]; + if (self) { + _bundle = bundle; + [self _initializeAnimationContainer]; + [self _setupWithSceneModel:model]; + } + return self; +} + +- (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; +} + +# pragma mark - Inspectables + +- (void)setAnimation:(NSString *)animationName { + + _animation = animationName; + + [self setAnimationNamed:animationName]; + +} + +# pragma mark - Internal Methods + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +- (void)_initializeAnimationContainer { + self.clipsToBounds = YES; +} + +- (void)_commonInit { + _animationSpeed = 1; + _animationProgress = 0; + _loopAnimation = NO; + _repeatCount = 1; + _autoReverseAnimation = NO; + _playRangeEndFrame = nil; + _playRangeStartFrame = nil; + _playRangeEndProgress = 0; + _playRangeStartProgress = 0; + _shouldRasterizeWhenIdle = NO; + [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_handleWillEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil]; + [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_handleWillEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; +} + +#else + +- (void)_initializeAnimationContainer { + self.wantsLayer = YES; +} + +- (void)_commonInit { + _animationSpeed = 1; + _animationProgress = 0; + _loopAnimation = NO; + _repeatCount = 1; + _autoReverseAnimation = NO; + _playRangeEndFrame = nil; + _playRangeStartFrame = nil; + _playRangeEndProgress = 0; + _playRangeStartProgress = 0; + _shouldRasterizeWhenIdle = NO; +} + +#endif + + + +- (void)dealloc { + [NSNotificationCenter.defaultCenter removeObserver:self]; +} + +- (void)_setupWithSceneModel:(LOTComposition *)model { + if (_sceneModel) { + [self _removeCurrentAnimationIfNecessary]; + [self _callCompletionIfNecessary:NO]; + [_compContainer removeFromSuperlayer]; + _compContainer = nil; + _sceneModel = nil; + [self _commonInit]; + } + + _sceneModel = model; + _compContainer = [[LOTCompositionContainer alloc] initWithModel:nil inLayerGroup:nil withLayerGroup:_sceneModel.layerGroup withAssestGroup:_sceneModel.assetGroup]; + [self.layer addSublayer:_compContainer]; + [self _restoreState]; + [self setNeedsLayout]; +} + +- (void)_restoreState { + if (_isAnimationPlaying) { + _isAnimationPlaying = NO; + if (_playRangeStartFrame && _playRangeEndFrame) { + [self playFromFrame:_playRangeStartFrame toFrame:_playRangeEndFrame withCompletion:self.completionBlock]; + } else if (_playRangeEndProgress != _playRangeStartProgress) { + [self playFromProgress:_playRangeStartProgress toProgress:_playRangeEndProgress withCompletion:self.completionBlock]; + } else { + [self playWithCompletion:self.completionBlock]; + } + } else { + self.animationProgress = _animationProgress; + } +} + +- (void)_removeCurrentAnimationIfNecessary { + _isAnimationPlaying = NO; + [_compContainer removeAllAnimations]; + _compContainer.shouldRasterize = _shouldRasterizeWhenIdle; +} + +- (CGFloat)_progressForFrame:(NSNumber *)frame { + if (!_sceneModel) { + return 0; + } + return ((frame.floatValue - _sceneModel.startFrame.floatValue) / (_sceneModel.endFrame.floatValue - _sceneModel.startFrame.floatValue)); +} + +- (NSNumber *)_frameForProgress:(CGFloat)progress { + if (!_sceneModel) { + return @0; + } + return @(((_sceneModel.endFrame.floatValue - _sceneModel.startFrame.floatValue) * progress) + _sceneModel.startFrame.floatValue); +} + +- (BOOL)_isSpeedNegative { + // If the animation speed is negative, then we're moving backwards. + return _animationSpeed >= 0; +} + +- (void)_handleWindowChanges:(BOOL)hasNewWindow +{ + // When this view or its superview is leaving the screen, e.g. a modal is presented or another + // screen is pushed, this method will get called with newWindow value set to nil - indicating that + // this view will be detached from the visible window. + // When a view is detached, animations will stop - but will not automatically resumed when it's + // re-attached back to window, e.g. when the presented modal is dismissed or another screen is + // pop. + if (hasNewWindow) { + // The view is being re-attached, resume animation if needed. + if (_shouldRestoreStateWhenAttachedToWindow) { + _shouldRestoreStateWhenAttachedToWindow = NO; + + _isAnimationPlaying = YES; + _completionBlock = _completionBlockToRestoreWhenAttachedToWindow; + _completionBlockToRestoreWhenAttachedToWindow = nil; + + [self performSelector:@selector(_restoreState) withObject:nil afterDelay:0 inModes:@[NSRunLoopCommonModes]]; + } + } else { + // The view is being detached, capture information that need to be restored later. + if (_isAnimationPlaying) { + LOTAnimationCompletionBlock completion = _completionBlock; + [self pause]; + _shouldRestoreStateWhenAttachedToWindow = YES; + _completionBlockToRestoreWhenAttachedToWindow = completion; + _completionBlock = nil; + } + } +} + +- (void)_handleWillEnterBackground { + [self _handleWindowChanges: false]; +} + +- (void)_handleWillEnterForeground { + [self _handleWindowChanges: (self.window != nil)]; +} + +# pragma mark - Completion Block + +- (void)_callCompletionIfNecessary:(BOOL)complete { + if (self.completionBlock) { + LOTAnimationCompletionBlock completion = self.completionBlock; + self.completionBlock = nil; + completion(complete); + } +} + +# pragma mark - External Methods + +- (void)setAnimationNamed:(nonnull NSString *)animationName { + LOTComposition *comp = [LOTComposition animationNamed:animationName]; + + [self _initializeAnimationContainer]; + [self _setupWithSceneModel:comp]; +} + +- (void)setAnimationNamed:(NSString *)animationName inBundle:(NSBundle *)bundle { + LOTComposition *comp = [LOTComposition animationNamed:animationName inBundle:bundle]; + + [self _initializeAnimationContainer]; + [self _setupWithSceneModel:comp]; +} + +- (void)setAnimationFromJSON:(nonnull NSDictionary *)animationJSON { + LOTComposition *comp = [LOTComposition animationFromJSON:animationJSON]; + + [self _initializeAnimationContainer]; + [self _setupWithSceneModel:comp]; +} + +- (void)setAnimationFromJSON:(NSDictionary *)animationJSON inBundle:(NSBundle *)bundle { + LOTComposition *comp = [LOTComposition animationFromJSON:animationJSON inBundle:bundle]; + + [self _initializeAnimationContainer]; + [self _setupWithSceneModel:comp]; +} + +# pragma mark - External Methods - Model + +- (void)setSceneModel:(LOTComposition *)sceneModel { + [self _setupWithSceneModel:sceneModel]; +} + +# pragma mark - External Methods - Play Control + +- (void)play { + if (!_sceneModel) { + _isAnimationPlaying = YES; + return; + } + [self playFromFrame:_sceneModel.startFrame toFrame:_sceneModel.endFrame withCompletion:nil]; +} + +- (void)playWithCompletion:(LOTAnimationCompletionBlock)completion { + if (!_sceneModel) { + _isAnimationPlaying = YES; + self.completionBlock = completion; + return; + } + [self playFromFrame:_sceneModel.startFrame toFrame:_sceneModel.endFrame withCompletion:completion]; +} + +- (void)playToProgress:(CGFloat)progress withCompletion:(nullable LOTAnimationCompletionBlock)completion { + [self playFromProgress:0 toProgress:progress withCompletion:completion]; +} + +- (void)playFromProgress:(CGFloat)fromStartProgress + toProgress:(CGFloat)toEndProgress + withCompletion:(nullable LOTAnimationCompletionBlock)completion { + if (!_sceneModel) { + _isAnimationPlaying = YES; + self.completionBlock = completion; + _playRangeStartProgress = fromStartProgress; + _playRangeEndProgress = toEndProgress; + return; + } + [self playFromFrame:[self _frameForProgress:fromStartProgress] + toFrame:[self _frameForProgress:toEndProgress] + withCompletion:completion]; +} + +- (void)playToFrame:(nonnull NSNumber *)toFrame + withCompletion:(nullable LOTAnimationCompletionBlock)completion { + [self playFromFrame:_sceneModel.startFrame toFrame:toFrame withCompletion:completion]; +} + +- (void)playFromFrame:(nonnull NSNumber *)fromStartFrame + toFrame:(nonnull NSNumber *)toEndFrame + withCompletion:(nullable LOTAnimationCompletionBlock)completion { + if (_isAnimationPlaying) { + return; + } + _playRangeStartFrame = fromStartFrame; + _playRangeEndFrame = toEndFrame; + if (completion) { + self.completionBlock = completion; + } + if (!_sceneModel) { + _isAnimationPlaying = YES; + return; + } + + BOOL playingForward = ((_animationSpeed > 0) && (toEndFrame.floatValue > fromStartFrame.floatValue)) + || ((_animationSpeed < 0) && (fromStartFrame.floatValue > toEndFrame.floatValue)); + + CGFloat leftFrameValue = MIN(fromStartFrame.floatValue, toEndFrame.floatValue); + CGFloat rightFrameValue = MAX(fromStartFrame.floatValue, toEndFrame.floatValue); + + NSNumber *currentFrame = [self _frameForProgress:_animationProgress]; + + currentFrame = @(MAX(MIN(currentFrame.floatValue, rightFrameValue), leftFrameValue)); + + if (currentFrame.floatValue == rightFrameValue && playingForward) { + currentFrame = @(leftFrameValue); + } else if (currentFrame.floatValue == leftFrameValue && !playingForward) { + currentFrame = @(rightFrameValue); + } + _animationProgress = [self _progressForFrame:currentFrame]; + + CGFloat currentProgress = _animationProgress * (_sceneModel.endFrame.floatValue - _sceneModel.startFrame.floatValue); + CGFloat skipProgress; + if (playingForward) { + skipProgress = currentProgress - leftFrameValue; + } else { + skipProgress = rightFrameValue - currentProgress; + } + NSTimeInterval offset = MAX(0, skipProgress) / _sceneModel.framerate.floatValue; + if (!self.window) { + _shouldRestoreStateWhenAttachedToWindow = YES; + _completionBlockToRestoreWhenAttachedToWindow = self.completionBlock; + self.completionBlock = nil; + } else { + NSTimeInterval duration = (ABS(toEndFrame.floatValue - fromStartFrame.floatValue) / _sceneModel.framerate.floatValue); + CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"currentFrame"]; + animation.speed = _animationSpeed; + animation.fromValue = fromStartFrame; + animation.toValue = toEndFrame; + animation.duration = duration; + animation.fillMode = kCAFillModeBoth; + animation.repeatCount = _loopAnimation || _repeatCount < 0 ? HUGE_VALF :_repeatCount; + animation.autoreverses = _autoReverseAnimation; + animation.delegate = self; + animation.removedOnCompletion = NO; + if (offset != 0) { + CFTimeInterval currentTime = CACurrentMediaTime(); + CFTimeInterval currentLayerTime = [self.layer convertTime:currentTime fromLayer:nil]; + animation.beginTime = currentLayerTime - (offset * 1 / _animationSpeed); + } + [_compContainer addAnimation:animation forKey:kCompContainerAnimationKey]; + _compContainer.shouldRasterize = NO; + } + _isAnimationPlaying = YES; +} + +#pragma mark - Other Time Controls + +- (void)stop { + _isAnimationPlaying = NO; + if (_sceneModel) { + [self setProgressWithFrame:_sceneModel.startFrame callCompletionIfNecessary:YES]; + } +} + +- (void)pause { + if (!_sceneModel || + !_isAnimationPlaying) { + _isAnimationPlaying = NO; + return; + } + NSNumber *frame = [_compContainer.presentationLayer.currentFrame copy]; + [self setProgressWithFrame:frame callCompletionIfNecessary:YES]; +} + +- (void)setAnimationProgress:(CGFloat)animationProgress { + if (!_sceneModel) { + _animationProgress = animationProgress; + return; + } + [self setProgressWithFrame:[self _frameForProgress:animationProgress] callCompletionIfNecessary:YES]; +} + +- (void)setProgressWithFrame:(nonnull NSNumber *)currentFrame { + [self setProgressWithFrame:currentFrame callCompletionIfNecessary:YES]; +} + +- (void)setProgressWithFrame:(nonnull NSNumber *)currentFrame callCompletionIfNecessary:(BOOL)callCompletion { + [self _removeCurrentAnimationIfNecessary]; + + if (_shouldRestoreStateWhenAttachedToWindow) { + _shouldRestoreStateWhenAttachedToWindow = NO; + + self.completionBlock = _completionBlockToRestoreWhenAttachedToWindow; + _completionBlockToRestoreWhenAttachedToWindow = nil; + } + + _animationProgress = [self _progressForFrame:currentFrame]; + + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + _compContainer.currentFrame = currentFrame; + [_compContainer setNeedsDisplay]; + [CATransaction commit]; + if (callCompletion) { + [self _callCompletionIfNecessary:NO]; + } +} + +- (void)setLoopAnimation:(BOOL)loopAnimation { + _loopAnimation = loopAnimation; + if (_isAnimationPlaying && _sceneModel) { + NSNumber *frame = [_compContainer.presentationLayer.currentFrame copy]; + [self setProgressWithFrame:frame callCompletionIfNecessary:NO]; + [self playFromFrame:_playRangeStartFrame toFrame:_playRangeEndFrame withCompletion:self.completionBlock]; + } +} + +- (void)setAnimationSpeed:(CGFloat)animationSpeed { + _animationSpeed = animationSpeed; + if (_isAnimationPlaying && _sceneModel) { + NSNumber *frame = [_compContainer.presentationLayer.currentFrame copy]; + [self setProgressWithFrame:frame callCompletionIfNecessary:NO]; + [self playFromFrame:_playRangeStartFrame toFrame:_playRangeEndFrame withCompletion:self.completionBlock]; + } +} + +- (void)forceDrawingUpdate { + [self _layoutAndForceUpdate]; +} + +# pragma mark - External Methods - Idle Rasterization + +- (void)setShouldRasterizeWhenIdle:(BOOL)shouldRasterize { + _shouldRasterizeWhenIdle = shouldRasterize; + if (!_isAnimationPlaying) { + _compContainer.shouldRasterize = _shouldRasterizeWhenIdle; + } +} + +# pragma mark - External Methods - Cache + +- (void)setCacheEnable:(BOOL)cacheEnable { + _cacheEnable = cacheEnable; + if (!self.sceneModel.cacheKey) { + return; + } + if (cacheEnable) { + [[LOTAnimationCache sharedCache] addAnimation:_sceneModel forKey:self.sceneModel.cacheKey]; + } else { + [[LOTAnimationCache sharedCache] removeAnimationForKey:self.sceneModel.cacheKey]; + } +} + +# pragma mark - External Methods - Interactive Controls + +- (void)setValueDelegate:(id _Nonnull)delegate + forKeypath:(LOTKeypath * _Nonnull)keypath { + [_compContainer setValueDelegate:delegate forKeypath:keypath]; + [self _layoutAndForceUpdate]; +} + +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath { + return [_compContainer keysForKeyPath:keypath]; +} + +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertPoint:point toKeypathLayer:keypath withParentLayer:self.layer]; +} + +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertRect:rect toKeypathLayer:keypath withParentLayer:self.layer]; +} + +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertPoint:point fromKeypathLayer:keypath withParentLayer:self.layer]; +} + +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + return [_compContainer convertRect:rect fromKeypathLayer:keypath withParentLayer:self.layer]; +} + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +- (void)addSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer addSublayer:wrapperView.layer toKeypathLayer:keypath]; +} + +- (void)maskSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layoutAndForceUpdate]; + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer maskSublayer:wrapperView.layer toKeypathLayer:keypath]; +} + + +#else + +- (void)addSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layout]; + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer addSublayer:wrapperView.layer toKeypathLayer:keypath]; +} + +- (void)maskSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath { + [self _layout]; + CGRect viewRect = view.frame; + LOTView *wrapperView = [[LOTView alloc] initWithFrame:viewRect]; + view.frame = view.bounds; + view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [wrapperView addSubview:view]; + [self addSubview:wrapperView]; + [_compContainer maskSublayer:wrapperView.layer toKeypathLayer:keypath]; +} + +#endif + +# pragma mark - Semi-Private Methods + +- (CALayer * _Nullable)layerForKey:(NSString * _Nonnull)keyname { + return _compContainer.childMap[keyname]; +} + +- (NSArray * _Nonnull)compositionLayers { + return _compContainer.childLayers; +} + +# pragma mark - Getters and Setters + +- (CGFloat)animationDuration { + if (!_sceneModel) { + return 0; + } + CAAnimation *play = [_compContainer animationForKey:kCompContainerAnimationKey]; + if (play) { + return play.duration; + } + return (_sceneModel.endFrame.floatValue - _sceneModel.startFrame.floatValue) / _sceneModel.framerate.floatValue; +} + +- (CGFloat)animationProgress { + if (_isAnimationPlaying && + _compContainer.presentationLayer) { + CGFloat activeProgress = [self _progressForFrame:[(LOTCompositionContainer *)_compContainer.presentationLayer currentFrame]]; + return activeProgress; + } + return _animationProgress; +} + +# pragma mark - Overrides + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +#define LOTViewContentMode UIViewContentMode +#define LOTViewContentModeScaleToFill UIViewContentModeScaleToFill +#define LOTViewContentModeScaleAspectFit UIViewContentModeScaleAspectFit +#define LOTViewContentModeScaleAspectFill UIViewContentModeScaleAspectFill +#define LOTViewContentModeRedraw UIViewContentModeRedraw +#define LOTViewContentModeCenter UIViewContentModeCenter +#define LOTViewContentModeTop UIViewContentModeTop +#define LOTViewContentModeBottom UIViewContentModeBottom +#define LOTViewContentModeLeft UIViewContentModeLeft +#define LOTViewContentModeRight UIViewContentModeRight +#define LOTViewContentModeTopLeft UIViewContentModeTopLeft +#define LOTViewContentModeTopRight UIViewContentModeTopRight +#define LOTViewContentModeBottomLeft UIViewContentModeBottomLeft +#define LOTViewContentModeBottomRight UIViewContentModeBottomRight + +- (CGSize)intrinsicContentSize { + if (!_sceneModel) { + return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric); + } + return _sceneModel.compBounds.size; +} + +- (void)didMoveToSuperview { + [super didMoveToSuperview]; + if (self.superview == nil) { + [self _callCompletionIfNecessary:NO]; + } +} + +- (void)willMoveToWindow:(UIWindow *)newWindow { + [self _handleWindowChanges:(newWindow != nil)]; +} + +- (void)didMoveToWindow { +#if TARGET_OS_VISION + _compContainer.rasterizationScale = 2; +#else + _compContainer.rasterizationScale = self.window.screen.scale; +#endif +} + +- (void)setContentMode:(LOTViewContentMode)contentMode { + [super setContentMode:contentMode]; + [self setNeedsLayout]; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + [self _layout]; +} + +#else + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow { + [self _handleWindowChanges:(newWindow != nil)]; +} + +- (void)viewDidMoveToWindow { + _compContainer.rasterizationScale = self.window.screen.backingScaleFactor; +} + +- (void)setCompletionBlock:(LOTAnimationCompletionBlock)completionBlock { + if (completionBlock) { + _completionBlock = ^(BOOL finished) { + dispatch_async(dispatch_get_main_queue(), ^{ completionBlock(finished); }); + }; + } + else { + _completionBlock = nil; + } +} + +- (void)setContentMode:(LOTViewContentMode)contentMode { + _contentMode = contentMode; + [self setNeedsLayout]; +} + +- (void)setNeedsLayout { + self.needsLayout = YES; +} + +- (BOOL)isFlipped { + return YES; +} + +- (BOOL)wantsUpdateLayer { + return YES; +} + +- (void)layout { + [super layout]; + [self _layout]; +} + +#endif + +- (void)_layoutAndForceUpdate { + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + [self _layout]; + [_compContainer displayWithFrame:_compContainer.currentFrame forceUpdate:YES]; + [CATransaction commit]; +} + +- (void)_layout { + CGPoint centerPoint = LOT_RectGetCenterPoint(self.bounds); + CATransform3D xform; + + if (self.contentMode == LOTViewContentModeScaleToFill) { + CGSize scaleSize = CGSizeMake(self.bounds.size.width / self.sceneModel.compBounds.size.width, + self.bounds.size.height / self.sceneModel.compBounds.size.height); + xform = CATransform3DMakeScale(scaleSize.width, scaleSize.height, 1); + } else if (self.contentMode == LOTViewContentModeScaleAspectFit) { + CGFloat compAspect = self.sceneModel.compBounds.size.width / self.sceneModel.compBounds.size.height; + CGFloat viewAspect = self.bounds.size.width / self.bounds.size.height; + BOOL scaleWidth = compAspect > viewAspect; + CGFloat dominantDimension = scaleWidth ? self.bounds.size.width : self.bounds.size.height; + CGFloat compDimension = scaleWidth ? self.sceneModel.compBounds.size.width : self.sceneModel.compBounds.size.height; + CGFloat scale = dominantDimension / compDimension; + xform = CATransform3DMakeScale(scale, scale, 1); + } else if (self.contentMode == LOTViewContentModeScaleAspectFill) { + CGFloat compAspect = self.sceneModel.compBounds.size.width / self.sceneModel.compBounds.size.height; + CGFloat viewAspect = self.bounds.size.width / self.bounds.size.height; + BOOL scaleWidth = compAspect < viewAspect; + CGFloat dominantDimension = scaleWidth ? self.bounds.size.width : self.bounds.size.height; + CGFloat compDimension = scaleWidth ? self.sceneModel.compBounds.size.width : self.sceneModel.compBounds.size.height; + CGFloat scale = dominantDimension / compDimension; + xform = CATransform3DMakeScale(scale, scale, 1); + } else { + xform = CATransform3DIdentity; + } + + // Support use LOTAnimationView with UIView:animate + NSArray *animKey = self.layer.animationKeys; + CAAnimation *animation; + if (animKey && animKey.count > 0) { + animation = [self.layer animationForKey:animKey[0]]; + } + + if (animation) { + [_compContainer removeAnimationForKey:kCompContainerPositionKey]; + [_compContainer removeAnimationForKey:kCompContainerTransformKey]; + + id positionAnimCopy = animation.copy; + CABasicAnimation *positionAnimation; + if (positionAnimCopy && [positionAnimCopy isKindOfClass:CABasicAnimation.class]) { + positionAnimation = (CABasicAnimation *)positionAnimCopy; + } else { + positionAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; + } + positionAnimation.keyPath = @"position"; + positionAnimation.additive = NO; + positionAnimation.fromValue = [NSValue valueWithCGPoint:_compContainer.presentationLayer.position]; + positionAnimation.toValue = [NSValue valueWithCGPoint:centerPoint]; + positionAnimation.removedOnCompletion = YES; + + id xformAnimCopy = animation.copy; + CABasicAnimation *xformAnimation; + if (xformAnimCopy && [xformAnimCopy isKindOfClass:CABasicAnimation.class]) { + xformAnimation = (CABasicAnimation *)xformAnimCopy; + } else { + xformAnimCopy = [CABasicAnimation animationWithKeyPath:@"transform"]; + } + xformAnimation.keyPath = @"transform"; + xformAnimation.additive = NO; + xformAnimation.fromValue = [NSValue valueWithCATransform3D:_compContainer.presentationLayer.transform]; + xformAnimation.toValue = [NSValue valueWithCATransform3D:xform]; + xformAnimation.removedOnCompletion = YES; + + _compContainer.transform = CATransform3DIdentity; + _compContainer.bounds = _sceneModel.compBounds; + _compContainer.viewportBounds = _sceneModel.compBounds; + + _compContainer.position = centerPoint; + _compContainer.transform = xform; + _compContainer.anchorPoint = self.layer.anchorPoint; + + [_compContainer addAnimation:positionAnimation forKey:kCompContainerPositionKey]; + [_compContainer addAnimation:xformAnimation forKey:kCompContainerTransformKey]; + + } else { + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + CATransaction.animationDuration = 0; + _compContainer.transform = CATransform3DIdentity; + _compContainer.bounds = _sceneModel.compBounds; + _compContainer.viewportBounds = _sceneModel.compBounds; + _compContainer.transform = xform; + _compContainer.position = centerPoint; + [CATransaction commit]; + } +} + +# pragma mark - CAAnimationDelegate + +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)complete { + if ([_compContainer animationForKey:kCompContainerAnimationKey] == anim && + [anim isKindOfClass:[CABasicAnimation class]]) { + CABasicAnimation *playAnimation = (CABasicAnimation *)anim; + NSNumber *frame = _compContainer.presentationLayer.currentFrame; + if (complete) { + // Set the final frame based on the animation to/from values. If playing forward, use the + // toValue otherwise we want to end on the fromValue. + frame = [self _isSpeedNegative] ? (NSNumber *)playAnimation.toValue : (NSNumber *)playAnimation.fromValue; + } + [self _removeCurrentAnimationIfNecessary]; + [self setProgressWithFrame:frame callCompletionIfNecessary:NO]; + [self _callCompletionIfNecessary:complete]; + } +} + +# pragma mark - DEPRECATED + +- (void)addSubview:(nonnull LOTView *)view + toLayerNamed:(nonnull NSString *)layer + applyTransform:(BOOL)applyTransform { + NSLog(@"%s: Function is DEPRECATED. Please use addSubview:forKeypathLayer:", __PRETTY_FUNCTION__); + LOTKeypath *keypath = [LOTKeypath keypathWithString:layer]; + if (applyTransform) { + [self addSubview:view toKeypathLayer:keypath]; + } else { + [self maskSubview:view toKeypathLayer:keypath]; + } +} + +- (CGRect)convertRect:(CGRect)rect + toLayerNamed:(NSString *_Nullable)layerName { + NSLog(@"%s: Function is DEPRECATED. Please use convertRect:forKeypathLayer:", __PRETTY_FUNCTION__); + LOTKeypath *keypath = [LOTKeypath keypathWithString:layerName]; + return [self convertRect:rect toKeypathLayer:keypath]; +} + +- (void)setValue:(nonnull id)value + forKeypath:(nonnull NSString *)keypath + atFrame:(nullable NSNumber *)frame { + NSLog(@"%s: Function is DEPRECATED and no longer functional. Please use setValueCallback:forKeypath:", __PRETTY_FUNCTION__); +} + +- (void)logHierarchyKeypaths { + NSArray *keypaths = [self keysForKeyPath:[LOTKeypath keypathWithString:@"**"]]; + for (NSString *keypath in keypaths) { + NSLog(@"%@", keypath); + } +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationView_Internal.h b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationView_Internal.h new file mode 100644 index 0000000..b0cea80 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTAnimationView_Internal.h @@ -0,0 +1,22 @@ +// +// LOTAnimationView_Internal.h +// Lottie +// +// Created by Brandon Withrow on 12/7/16. +// Copyright © 2016 Brandon Withrow. All rights reserved. +// + +#import "LOTAnimationView.h" + +typedef enum : NSUInteger { + LOTConstraintTypeAlignToBounds, + LOTConstraintTypeAlignToLayer, + LOTConstraintTypeNone +} LOTConstraintType; + +@interface LOTAnimationView () + +- (CALayer * _Nullable)layerForKey:(NSString * _Nonnull)keyname; +- (NSArray * _Nonnull)compositionLayers; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTBlockCallback.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTBlockCallback.m new file mode 100644 index 0000000..0f168ac --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTBlockCallback.m @@ -0,0 +1,80 @@ +// +// LOTBlockCallback.m +// Lottie +// +// Created by brandon_withrow on 12/15/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTBlockCallback.h" + +@implementation LOTColorBlockCallback + ++ (instancetype)withBlock:(LOTColorValueCallbackBlock)block { + LOTColorBlockCallback *colorCallback = [[self alloc] init]; + colorCallback.callback = block; + return colorCallback; +} + +- (CGColorRef)colorForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startColor:(CGColorRef)startColor endColor:(CGColorRef)endColor currentColor:(CGColorRef)interpolatedColor { + return self.callback(currentFrame, startKeyframe, endKeyframe, interpolatedProgress, startColor, endColor, interpolatedColor); +} + +@end + +@implementation LOTNumberBlockCallback + ++ (instancetype)withBlock:(LOTNumberValueCallbackBlock)block { + LOTNumberBlockCallback *numberCallback = [[self alloc] init]; + numberCallback.callback = block; + return numberCallback; +} + +- (CGFloat)floatValueForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startValue:(CGFloat)startValue endValue:(CGFloat)endValue currentValue:(CGFloat)interpolatedValue { + return self.callback(currentFrame, startKeyframe, endKeyframe, interpolatedProgress, startValue, endValue, interpolatedValue); +} + +@end + +@implementation LOTPointBlockCallback + ++ (instancetype)withBlock:(LOTPointValueCallbackBlock)block { + LOTPointBlockCallback *callback = [[self alloc] init]; + callback.callback = block; + return callback; +} + +- (CGPoint)pointForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint currentPoint:(CGPoint)interpolatedPoint { + return self.callback(currentFrame, startKeyframe, endKeyframe, interpolatedProgress, startPoint, endPoint, interpolatedPoint); +} + +@end + +@implementation LOTSizeBlockCallback + ++ (instancetype)withBlock:(LOTSizeValueCallbackBlock)block { + LOTSizeBlockCallback *callback = [[self alloc] init]; + callback.callback = block; + return callback; +} + +- (CGSize)sizeForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startSize:(CGSize)startSize endSize:(CGSize)endSize currentSize:(CGSize)interpolatedSize { + return self.callback(currentFrame, startKeyframe, endKeyframe, interpolatedProgress, startSize, endSize, interpolatedSize); +} + +@end + +@implementation LOTPathBlockCallback + ++ (instancetype)withBlock:(LOTPathValueCallbackBlock)block { + LOTPathBlockCallback *callback = [[self alloc] init]; + callback.callback = block; + return callback; +} + +- (CGPathRef)pathForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress { + return self.callback(currentFrame, startKeyframe, endKeyframe, interpolatedProgress); +} + +@end + diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTCacheProvider.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTCacheProvider.m new file mode 100644 index 0000000..c0e1e83 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTCacheProvider.m @@ -0,0 +1,23 @@ +// +// LOTCacheProvider.m +// Lottie +// +// Created by punmy on 2017/7/8. +// +// + +#import "LOTCacheProvider.h" + +@implementation LOTCacheProvider + +static id _imageCache; + ++ (id)imageCache { + return _imageCache; +} + ++ (void)setImageCache:(id)cache { + _imageCache = cache; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTComposition.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTComposition.m new file mode 100644 index 0000000..66a4eb7 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTComposition.m @@ -0,0 +1,142 @@ +// +// LOTScene.m +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import "LOTComposition.h" +#import "LOTLayer.h" +#import "LOTAssetGroup.h" +#import "LOTLayerGroup.h" +#import "LOTAnimationCache.h" + +@implementation LOTComposition + +# pragma mark - Convenience Initializers + ++ (nullable instancetype)animationNamed:(nonnull NSString *)animationName { + return [self animationNamed:animationName inBundle:[NSBundle mainBundle]]; +} + ++ (nullable instancetype)animationNamed:(nonnull NSString *)animationName inBundle:(nonnull NSBundle *)bundle { + if (!animationName) { + return nil; + } + animationName = [animationName stringByDeletingPathExtension]; + + LOTComposition *comp = [[LOTAnimationCache sharedCache] animationForKey:animationName]; + if (comp) { + return comp; + } + + NSError *error; + NSString *filePath = [bundle pathForResource:animationName ofType:@"json"]; + NSData *jsonData = [[NSData alloc] initWithContentsOfFile:filePath]; + + if (@available(iOS 9.0, *)) { + if (!jsonData) { + jsonData = [[NSDataAsset alloc] initWithName:animationName bundle:bundle].data; + } + } + + NSDictionary *JSONObject = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData + options:0 error:&error] : nil; + if (JSONObject && !error) { + LOTComposition *laScene = [[self alloc] initWithJSON:JSONObject withAssetBundle:bundle]; + [[LOTAnimationCache sharedCache] addAnimation:laScene forKey:animationName]; + laScene.cacheKey = animationName; + return laScene; + } + NSLog(@"%s: Animation Not Found", __PRETTY_FUNCTION__); + return nil; +} + ++ (nullable instancetype)animationWithFilePath:(nonnull NSString *)filePath { + NSString *animationName = filePath; + + LOTComposition *comp = [[LOTAnimationCache sharedCache] animationForKey:animationName]; + if (comp) { + return comp; + } + + NSError *error; + NSData *jsonData = [[NSData alloc] initWithContentsOfFile:filePath]; + NSDictionary *JSONObject = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData + options:0 error:&error] : nil; + if (JSONObject && !error) { + LOTComposition *laScene = [[self alloc] initWithJSON:JSONObject withAssetBundle:[NSBundle mainBundle]]; + laScene.rootDirectory = [filePath stringByDeletingLastPathComponent]; + [[LOTAnimationCache sharedCache] addAnimation:laScene forKey:animationName]; + laScene.cacheKey = animationName; + return laScene; + } + + NSLog(@"%s: Animation Not Found", __PRETTY_FUNCTION__); + return nil; +} + ++ (nonnull instancetype)animationFromJSON:(nonnull NSDictionary *)animationJSON { + return [self animationFromJSON:animationJSON inBundle:[NSBundle mainBundle]]; +} + ++ (nonnull instancetype)animationFromJSON:(nullable NSDictionary *)animationJSON inBundle:(nullable NSBundle *)bundle { + return [[self alloc] initWithJSON:animationJSON withAssetBundle:bundle]; +} + +#pragma mark - Initializer + +- (instancetype _Nonnull)initWithJSON:(NSDictionary * _Nullable)jsonDictionary + withAssetBundle:(NSBundle * _Nullable)bundle { + self = [super init]; + if (self) { + if (jsonDictionary) { + [self _mapFromJSON:jsonDictionary withAssetBundle:bundle]; + } + } + return self; +} + +#pragma mark - Internal Methods + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary + withAssetBundle:(NSBundle *)bundle { + NSNumber *width = jsonDictionary[@"w"]; + NSNumber *height = jsonDictionary[@"h"]; + if (width && height) { + CGRect bounds = CGRectMake(0, 0, width.floatValue, height.floatValue); + _compBounds = bounds; + } + + _startFrame = [jsonDictionary[@"ip"] copy]; + _endFrame = [jsonDictionary[@"op"] copy]; + _framerate = [jsonDictionary[@"fr"] copy]; + + if (_startFrame && _endFrame && _framerate) { + NSInteger frameDuration = (_endFrame.integerValue - _startFrame.integerValue) - 1; + NSTimeInterval timeDuration = frameDuration / _framerate.floatValue; + _timeDuration = timeDuration; + } + + NSArray *assetArray = jsonDictionary[@"assets"]; + if (assetArray.count) { + _assetGroup = [[LOTAssetGroup alloc] initWithJSON:assetArray withAssetBundle:bundle withFramerate:_framerate]; + } + + NSArray *layersJSON = jsonDictionary[@"layers"]; + if (layersJSON) { + _layerGroup = [[LOTLayerGroup alloc] initWithLayerJSON:layersJSON + withAssetGroup:_assetGroup + withFramerate:_framerate]; + } + + [_assetGroup finalizeInitializationWithFramerate:_framerate]; +} + +- (void)setRootDirectory:(NSString *)rootDirectory { + _rootDirectory = rootDirectory; + self.assetGroup.rootDirectory = rootDirectory; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTInterpolatorCallback.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTInterpolatorCallback.m new file mode 100644 index 0000000..298e3a3 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTInterpolatorCallback.m @@ -0,0 +1,56 @@ +// +// LOTInterpolatorCallback.m +// Lottie +// +// Created by brandon_withrow on 1/5/18. +// Copyright © 2018 Airbnb. All rights reserved. +// + +#import "LOTInterpolatorCallback.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTFloatInterpolatorCallback + ++ (instancetype _Nonnull)withFromFloat:(CGFloat)fromFloat toFloat:(CGFloat)toFloat { + LOTFloatInterpolatorCallback *interpolator = [[self alloc] init]; + interpolator.fromFloat = fromFloat; + interpolator.toFloat = toFloat; + return interpolator; +} +- (CGFloat)floatValueForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startValue:(CGFloat)startValue endValue:(CGFloat)endValue currentValue:(CGFloat)interpolatedValue { + return LOT_RemapValue(self.currentProgress, 0, 1, self.fromFloat, self.toFloat); +} + +@end + +@implementation LOTPointInterpolatorCallback + ++ (instancetype _Nonnull)withFromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint { + LOTPointInterpolatorCallback *interpolator = [[self alloc] init]; + interpolator.fromPoint = fromPoint; + interpolator.toPoint = toPoint; + return interpolator; +} +- (CGPoint)pointForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint currentPoint:(CGPoint)interpolatedPoint { + return LOT_PointInLine(self.fromPoint, self.toPoint, self.currentProgress); +} + +@end + +@implementation LOTSizeInterpolatorCallback + ++ (instancetype)withFromSize:(CGSize)fromSize toSize:(CGSize)toSize { + LOTSizeInterpolatorCallback *interpolator = [[self alloc] init]; + interpolator.fromSize = fromSize; + interpolator.toSize = toSize; + return interpolator; +} + +- (CGSize)sizeForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startSize:(CGSize)startSize endSize:(CGSize)endSize currentSize:(CGSize)interpolatedSize { + CGPoint from = CGPointMake(self.fromSize.width, self.fromSize.height); + CGPoint to = CGPointMake(self.toSize.width, self.toSize.height); + CGPoint returnPoint = LOT_PointInLine(from, to, self.currentProgress); + return CGSizeMake(returnPoint.x, returnPoint.y); +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTKeypath.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTKeypath.m new file mode 100644 index 0000000..100c293 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTKeypath.m @@ -0,0 +1,140 @@ +// +// LOTKeypath.m +// Lottie_iOS +// +// Created by brandon_withrow on 12/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTKeypath.h" + +NSString *const kLOTKeypathEnd = @"LOTENDKEYPATH"; + +@implementation LOTKeypath { + NSInteger _currentDepth; + NSMutableArray *_fuzzyDepthStack; + NSMutableArray *_currentStack; + NSArray *_keys; + NSMutableDictionary *_searchResults; +} + ++ (nonnull LOTKeypath *)keypathWithString:(nonnull NSString *)keypath { + return [[self alloc] initWithKeys:[keypath componentsSeparatedByString:@"."]]; +} + ++ (nonnull LOTKeypath *)keypathWithKeys:(nonnull NSString *)firstKey, ... { + NSMutableArray *keys = [NSMutableArray array]; + va_list args; + va_start(args, firstKey); + for (NSString *arg = firstKey; arg != nil; arg = va_arg(args, NSString*)) + { + [keys addObject:arg]; + } + va_end(args); + return [[self alloc] initWithKeys:keys]; +} + +- (instancetype)initWithKeys:(NSArray *)keys { + self = [super init]; + if (self) { + _keys = [NSArray arrayWithArray:keys]; + NSMutableString *absolutePath = [NSMutableString string]; + for (int i = 0; i < _keys.count; i++) { + if (i > 0) { + [absolutePath appendString:@"."]; + } + [absolutePath appendString:_keys[i]]; + } + _currentStack = [NSMutableArray array]; + _absoluteKeypath = absolutePath; + _currentDepth = 0; + _fuzzyDepthStack = [NSMutableArray array]; + _searchResults = [NSMutableDictionary dictionary]; + } + return self; +} + +- (BOOL)pushKey:(nonnull NSString *)key { + if (_currentDepth == _keys.count && + self.hasFuzzyWildcard == NO) { + return NO; + } + NSString *current = self.currentKey; + if (self.hasWildcard || + [current isEqualToString:key]) { + [_currentStack addObject:[key copy]]; + _currentDepth ++; + if (self.hasFuzzyWildcard) { + [_fuzzyDepthStack addObject:@(_currentDepth)]; + } + return YES; + } else if (self.hasFuzzyWildcard) { + [_currentStack addObject:[key copy]]; + return YES; + } + return NO; +} + +- (void)popKey { + if (_currentDepth == 0) { + return; + } + NSInteger stackCount = _currentStack.count; + [_currentStack removeLastObject]; + + if (self.hasFuzzyWildcard ) { + if (stackCount == _fuzzyDepthStack.lastObject.integerValue) { + [_fuzzyDepthStack removeLastObject]; + } else { + return; + } + } + _currentDepth --; +} + +- (void)popToRootKey { + _currentDepth = 0; + [_currentStack removeAllObjects]; + [_fuzzyDepthStack removeAllObjects]; +} + +- (NSString *)currentKey { + if (_currentDepth == _keys.count) { + return kLOTKeypathEnd; + } + return _keys[_currentDepth]; +} + +- (NSString *)currentKeyPath { + return [_currentStack componentsJoinedByString:@"."]; +} + +- (BOOL)hasWildcard { + if (_currentDepth == _keys.count) { + return NO; + } + return ([_keys[_currentDepth] isEqualToString:@"**"] || + [_keys[_currentDepth] isEqualToString:@"*"]); +} + +- (BOOL)hasFuzzyWildcard { + if (_currentDepth == 0 || + _currentDepth > _keys.count) { + return NO; + } + return [_keys[_currentDepth - 1] isEqualToString:@"**"]; +} + +- (BOOL)endOfKeypath { + return (_currentDepth == _keys.count); +} + +- (void)addSearchResultForCurrentPath:(id _Nonnull)result { + [_searchResults setObject:result forKey:self.currentKeyPath]; +} + +- (NSDictionary *)searchResults { + return _searchResults; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/Private/LOTValueCallback.m b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTValueCallback.m new file mode 100644 index 0000000..0514748 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/Private/LOTValueCallback.m @@ -0,0 +1,79 @@ +// +// LOTValueCallback.m +// Lottie +// +// Created by brandon_withrow on 12/15/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueCallback.h" + +@implementation LOTColorValueCallback + ++ (instancetype _Nonnull)withCGColor:(CGColorRef _Nonnull)color { + LOTColorValueCallback *colorCallback = [[self alloc] init]; + colorCallback.colorValue = color; + return colorCallback; +} + +- (CGColorRef)colorForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startColor:(CGColorRef)startColor endColor:(CGColorRef)endColor currentColor:(CGColorRef)interpolatedColor { + return self.colorValue; +} + +@end + +@implementation LOTNumberValueCallback + ++ (instancetype _Nonnull)withFloatValue:(CGFloat)numberValue { + LOTNumberValueCallback *numberCallback = [[self alloc] init]; + numberCallback.numberValue = numberValue; + return numberCallback; +} + +- (CGFloat)floatValueForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startValue:(CGFloat)startValue endValue:(CGFloat)endValue currentValue:(CGFloat)interpolatedValue { + return self.numberValue; +} + +@end + +@implementation LOTPointValueCallback + ++ (instancetype _Nonnull)withPointValue:(CGPoint)pointValue { + LOTPointValueCallback *callback = [[self alloc] init]; + callback.pointValue = pointValue; + return callback; +} + +- (CGPoint)pointForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint currentPoint:(CGPoint)interpolatedPoint { + return self.pointValue; +} + +@end + +@implementation LOTSizeValueCallback + ++ (instancetype _Nonnull)withPointValue:(CGSize)sizeValue { + LOTSizeValueCallback *callback = [[self alloc] init]; + callback.sizeValue = sizeValue; + return callback; +} + +- (CGSize)sizeForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress startSize:(CGSize)startSize endSize:(CGSize)endSize currentSize:(CGSize)interpolatedSize { + return self.sizeValue; +} + +@end + +@implementation LOTPathValueCallback + ++ (instancetype _Nonnull)withCGPath:(CGPathRef _Nonnull)path { + LOTPathValueCallback *callback = [[self alloc] init]; + callback.pathValue = path; + return callback; +} + +- (CGPathRef)pathForFrame:(CGFloat)currentFrame startKeyframe:(CGFloat)startKeyframe endKeyframe:(CGFloat)endKeyframe interpolatedProgress:(CGFloat)interpolatedProgress { + return self.pathValue; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimatedControl.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimatedControl.h new file mode 100644 index 0000000..2a14bfa --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimatedControl.h @@ -0,0 +1,28 @@ +// +// LOTAnimatedControl.h +// Lottie +// +// Created by brandon_withrow on 8/25/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import + +@class LOTAnimationView; +@class LOTComposition; + +@interface LOTAnimatedControl : UIControl + +// This class is a base class that is intended to be subclassed + +/** + * Map a specific animation layer to a control state. + * When the state is set all layers will be hidden except the specified layer. + **/ + +- (void)setLayerName:(NSString * _Nonnull)layerName forState:(UIControlState)state; + +@property (nonatomic, strong, readonly, nonnull) LOTAnimationView *animationView; +@property (nonatomic, strong, nullable) LOTComposition *animationComp; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimatedSwitch.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimatedSwitch.h new file mode 100644 index 0000000..f313415 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimatedSwitch.h @@ -0,0 +1,53 @@ +// +// LOTAnimatedSwitch.h +// Lottie +// +// Created by brandon_withrow on 8/25/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatedControl.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTAnimatedSwitch : LOTAnimatedControl + +/// Convenience method to initialize a control from the Main Bundle by name ++ (instancetype _Nonnull)switchNamed:(NSString * _Nonnull)toggleName; + +/// Convenience method to initialize a control from the specified bundle by name ++ (instancetype _Nonnull)switchNamed:(NSString * _Nonnull)toggleName inBundle:(NSBundle * _Nonnull)bundle; + + +/// The ON/OFF state of the control. Setting will toggle without animation +@property (nonatomic, getter=isOn) BOOL on; + +/// Enable interactive sliding gesture for toggle +@property (nonatomic) BOOL interactiveGesture; + +/// Set the state of the control with animation +- (void)setOn:(BOOL)on animated:(BOOL)animated; // does not send action + +/// Styling + +/** + * Sets the animation play range for the ON state animation. + * fromProgress is the start of the animation + * toProgress is the end of the animation and also the ON static state + * Defaults 0-1 + **/ +- (void)setProgressRangeForOnState:(CGFloat)fromProgress + toProgress:(CGFloat)toProgress NS_SWIFT_NAME(setProgressRangeForOnState(fromProgress:toProgress:)); + +/** + * Sets the animation play range for the OFF state animation. + * fromProgress is the start of the animation + * toProgress is the end of the animation and also the OFF static state + * Defaults 1-0 + **/ +- (void)setProgressRangeForOffState:(CGFloat)fromProgress + toProgress:(CGFloat)toProgress NS_SWIFT_NAME(setProgressRangeForOffState(fromProgress:toProgress:)); + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationCache.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationCache.h new file mode 100644 index 0000000..badcc85 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationCache.h @@ -0,0 +1,37 @@ +// +// LOTAnimationCache.h +// Lottie +// +// Created by Brandon Withrow on 1/9/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class LOTComposition; + +@interface LOTAnimationCache : NSObject + +/// Global Cache ++ (instancetype)sharedCache; + +/// Adds animation to the cache +- (void)addAnimation:(LOTComposition *)animation forKey:(NSString *)key; + +/// Returns animation from cache. +- (LOTComposition * _Nullable)animationForKey:(NSString *)key; + +/// Removes a specific animation from the cache +- (void)removeAnimationForKey:(NSString *)key; + +/// Clears Everything from the Cache +- (void)clearCache; + +/// Disables Caching Animation Model Objects +- (void)disableCaching; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationTransitionController.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationTransitionController.h new file mode 100644 index 0000000..695b52a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationTransitionController.h @@ -0,0 +1,73 @@ +// +// LOTAnimationTransitionController.h +// Lottie +// +// Created by Brandon Withrow on 1/18/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import +#import + +/** LOTAnimationTransitionController + * + * This class creates a custom UIViewController transition animation + * using a Lottie animation to transition between two view controllers + * The transition can use custom defined layers in After Effects for to/from + * + * When referencing After Effects layers the animator masks or transforms the to/from viewController + * with the referenced layer. + * + */ + +@interface LOTAnimationTransitionController : NSObject + +/** + The initializer to create a new transition animation. + + @param animation The name of the Lottie Animation to load for the transition + + @param fromLayer The name of the custom layer to mask the fromVC screenshot with. + If no layer is specified then the screenshot is added behind the Lottie Animation + + @param toLayer The name of the custom layer to mask the toVC screenshot with. + If no layer is specified then the screenshot is added behind the Lottie Animation + and a fade transition is performed along with the Lottie animation. + + @param applyAnimationTransform A boolean that determines if the custom layer should + have the transform animation from the After Effects layer applied to it. If NO the + layer will be masked by the After Effects Layer + + */ +- (nonnull instancetype)initWithAnimationNamed:(nonnull NSString *)animation + fromLayerNamed:(nullable NSString *)fromLayer + toLayerNamed:(nullable NSString *)toLayer + applyAnimationTransform:(BOOL)applyAnimationTransform; + +/** + The initializer to create a new transition animation. + + @param animation The name of the Lottie Animation to load for the transition + + @param fromLayer The name of the custom layer to mask the fromVC screenshot with. + If no layer is specified then the screenshot is added behind the Lottie Animation + + @param toLayer The name of the custom layer to mask the toVC screenshot with. + If no layer is specified then the screenshot is added behind the Lottie Animation + and a fade transition is performed along with the Lottie animation. + + @param applyAnimationTransform A boolean that determines if the custom layer should + have the transform animation from the After Effects layer applied to it. If NO the + layer will be masked by the After Effects Layer + + @param bundle custom bundle to load animation and images, if no bundle is specified will load + from mainBundle + */ +- (instancetype _Nonnull)initWithAnimationNamed:(NSString *_Nonnull)animation + fromLayerNamed:(NSString *_Nullable)fromLayer + toLayerNamed:(NSString *_Nullable)toLayer + applyAnimationTransform:(BOOL)applyAnimationTransform + inBundle:(NSBundle *_Nonnull)bundle; + +@end + diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h new file mode 100644 index 0000000..80ee38b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h @@ -0,0 +1,261 @@ +// +// LOTAnimationView +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// Dream Big. + +#import +#import "LOTAnimationView_Compat.h" +#import "LOTComposition.h" +#import "LOTKeypath.h" +#import "LOTValueDelegate.h" + +typedef void (^LOTAnimationCompletionBlock)(BOOL animationFinished); +typedef void (^LOTInitializationErrorBlock)(NSError *error); + +@interface LOTAnimationView : LOTView + +/// Load animation by name from the default bundle, Images are also loaded from the bundle ++ (nonnull instancetype)animationNamed:(nonnull NSString *)animationName NS_SWIFT_NAME(init(name:)); + +/// Loads animation by name from specified bundle, Images are also loaded from the bundle ++ (nonnull instancetype)animationNamed:(nonnull NSString *)animationName inBundle:(nonnull NSBundle *)bundle NS_SWIFT_NAME(init(name:bundle:)); + +/// Creates an animation from the deserialized JSON Dictionary ++ (nonnull instancetype)animationFromJSON:(nonnull NSDictionary *)animationJSON NS_SWIFT_NAME(init(json:)); + +/// Loads an animation from a specific file path. WARNING Do not use a web URL for file path. ++ (nonnull instancetype)animationWithFilePath:(nonnull NSString *)filePath NS_SWIFT_NAME(init(filePath:)); + +/// Creates an animation from the deserialized JSON Dictionary, images are loaded from the specified bundle ++ (nonnull instancetype)animationFromJSON:(nullable NSDictionary *)animationJSON inBundle:(nullable NSBundle *)bundle NS_SWIFT_NAME(init(json:bundle:)); + +/// Creates an animation from the LOTComposition, images are loaded from the specified bundle +- (nonnull instancetype)initWithModel:(nullable LOTComposition *)model inBundle:(nullable NSBundle *)bundle; + +/// Loads animation asynchronously from the specified URL +- (nonnull instancetype)initWithContentsOfURL:(nonnull NSURL *)url; + +/// Loads animation asynchronously from the specified URL. Calls the specified errorBlock if the +/// animation cannot be initialized from the contents of the URL. +- (nonnull instancetype)initWithContentsOfURL:(NSURL *)url + errorBlock:(nullable LOTInitializationErrorBlock)errorBlock; + +/// Set animation name from Interface Builder +@property (nonatomic, strong) IBInspectable NSString * _Nullable animation; + +/// Load animation by name from the default bundle. Use when loading LOTAnimationView via Interface Builder. +- (void)setAnimationNamed:(nonnull NSString *)animationName NS_SWIFT_NAME(setAnimation(named:)); + +/// Load animation by name from a specific bundle. +- (void)setAnimationNamed:(nonnull NSString *)animationName inBundle:(nullable NSBundle *)bundle NS_SWIFT_NAME(setAnimation(named:bundle:)); + +/// Load animation from a JSON dictionary +- (void)setAnimationFromJSON:(nonnull NSDictionary *)animationJSON NS_SWIFT_NAME(setAnimation(json:)); + +/// Load animation from a JSON dictionary from a specific bundle +- (void)setAnimationFromJSON:(nonnull NSDictionary *)animationJSON inBundle:(nullable NSBundle *)bundle NS_SWIFT_NAME(setAnimation(json:bundle:)); + +/// Flag is YES when the animation is playing +@property (nonatomic, readonly) BOOL isAnimationPlaying; + +/// Tells the animation to loop indefinitely. Defaults to NO. +@property (nonatomic, assign) BOOL loopAnimation; + +// Number of times the animation plays in a loop. Defaults to 1y +@property (nonatomic, assign) CGFloat repeatCount; + +/// The animation will play forward and then backwards if loopAnimation is also YES +@property (nonatomic, assign) BOOL autoReverseAnimation; + +/// Sets a progress from 0 - 1 of the animation. If the animation is playing it will stop and the completion block will be called. +/// The current progress of the animation in absolute time. +/// e.g. a value of 0.75 always represents the same point in the animation, regardless of positive +/// or negative speed. +@property (nonatomic, assign) CGFloat animationProgress; + +/// Sets the speed of the animation. Accepts a negative value for reversing animation. +@property (nonatomic, assign) CGFloat animationSpeed; + +/// Read only of the duration in seconds of the animation at speed of 1 +@property (nonatomic, readonly) CGFloat animationDuration; + +/// Enables or disables caching of the backing animation model. Defaults to YES +@property (nonatomic, assign) BOOL cacheEnable; + +/// Sets a completion block to call when the animation has completed +@property (nonatomic, copy, nullable) LOTAnimationCompletionBlock completionBlock; + +/// Set the animation data +@property (nonatomic, strong, nullable) LOTComposition *sceneModel; + +/// Sets sholdRasterize to YES on the animation layer to improve compositioning performance when not animating. +/// Note this will not produce crisp results at resolutions above the animations set resolution. +/// Defaults to NO +@property (nonatomic, assign) BOOL shouldRasterizeWhenIdle; + +/* + * Plays the animation from its current position to a specific progress. + * The animation will start from its current position. + * If loopAnimation is YES the animation will loop from start position to toProgress indefinitely. + * If loopAnimation is NO the animation will stop and the completion block will be called. + */ +- (void)playToProgress:(CGFloat)toProgress + withCompletion:(nullable LOTAnimationCompletionBlock)completion; + +/* + * Plays the animation from specific progress to a specific progress + * The animation will start from its current position.. + * If loopAnimation is YES the animation will loop from the startProgress to the endProgress indefinitely + * If loopAnimation is NO the animation will stop and the completion block will be called. + */ +- (void)playFromProgress:(CGFloat)fromStartProgress + toProgress:(CGFloat)toEndProgress + withCompletion:(nullable LOTAnimationCompletionBlock)completion; + +/* + * Plays the animation from its current position to a specific frame. + * The animation will start from its current position. + * If loopAnimation is YES the animation will loop from beginning to toFrame indefinitely. + * If loopAnimation is NO the animation will stop and the completion block will be called. + */ +- (void)playToFrame:(nonnull NSNumber *)toFrame + withCompletion:(nullable LOTAnimationCompletionBlock)completion; + +/* + * Plays the animation from specific frame to a specific frame. + * The animation will start from its current position. + * If loopAnimation is YES the animation will loop start frame to end frame indefinitely. + * If loopAnimation is NO the animation will stop and the completion block will be called. + */ +- (void)playFromFrame:(nonnull NSNumber *)fromStartFrame + toFrame:(nonnull NSNumber *)toEndFrame + withCompletion:(nullable LOTAnimationCompletionBlock)completion; + + +/** + * Plays the animation from its current position to the end of the animation. + * The animation will start from its current position. + * If loopAnimation is YES the animation will loop from beginning to end indefinitely. + * If loopAnimation is NO the animation will stop and the completion block will be called. + **/ +- (void)playWithCompletion:(nullable LOTAnimationCompletionBlock)completion; + +/// Plays the animation +- (void)play; + +/// Stops the animation at the current frame. The completion block will be called. +- (void)pause; + +/// Stops the animation and rewinds to the beginning. The completion block will be called. +- (void)stop; + +/// Sets progress of animation to a specific frame. If the animation is playing it will stop and the completion block will be called. +- (void)setProgressWithFrame:(nonnull NSNumber *)currentFrame; + +/// Forces a layout and drawing update for the current frame. +- (void)forceDrawingUpdate; + +/// Logs all child keypaths +- (void)logHierarchyKeypaths; + +/*! + @brief Sets a LOTValueDelegate for each animation property returned from the LOTKeypath search. LOTKeypath matches views inside of LOTAnimationView to their After Effects counterparts. The LOTValueDelegate is called every frame as the animation plays to override animation values. A delegate can be any object that conforms to the LOTValueDelegate protocol, or one of the prebuilt delegate classes found in LOTBlockCallback, LOTInterpolatorCallback, and LOTValueCallback. + + @discussion + Example that sets an animated stroke to Red using a LOTColorValueCallback. + @code + LOTKeypath *keypath = [LOTKeypath keypathWithKeys:@"Layer 1", @"Ellipse 1", @"Stroke 1", @"Color", nil]; + LOTColorValueCallback *colorCallback = [LOTColorBlockCallback withColor:[UIColor redColor]]; + [animationView setValueDelegate:colorCallback forKeypath:keypath]; + @endcode + + See the documentation for LOTValueDelegate to see how to create LOTValueCallbacks. A delegate can be any object that conforms to the LOTValueDelegate protocol, or one of the prebuilt delegate classes found in LOTBlockCallback, LOTInterpolatorCallback, and LOTValueCallback. + + See the documentation for LOTKeypath to learn more about how to create keypaths. + + NOTE: The delegate is weakly retained. Be sure that the creator of a delegate is retained. + Read More at http://airbnb.io/lottie/ios/dynamic.html + */ +- (void)setValueDelegate:(id _Nonnull)delegates + forKeypath:(LOTKeypath * _Nonnull)keypath; + +/*! + @brief returns the string representation of every keypath matching the LOTKeypath search. + */ +- (nullable NSArray *)keysForKeyPath:(nonnull LOTKeypath *)keypath; + +/*! + @brief Converts a CGPoint from the Animation views top coordinate space into the coordinate space of the specified renderable animation node. + */ +- (CGPoint)convertPoint:(CGPoint)point + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +/*! + @brief Converts a CGRect from the Animation views top coordinate space into the coordinate space of the specified renderable animation node. + */ +- (CGRect)convertRect:(CGRect)rect + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +/*! + @brief Converts a CGPoint to the Animation views top coordinate space from the coordinate space of the specified renderable animation node. + */ +- (CGPoint)convertPoint:(CGPoint)point + fromKeypathLayer:(nonnull LOTKeypath *)keypath; + +/*! + @brief Converts a CGRect to the Animation views top coordinate space from the coordinate space of the specified renderable animation node. + */ +- (CGRect)convertRect:(CGRect)rect + fromKeypathLayer:(nonnull LOTKeypath *)keypath; + +/*! + @brief Adds a UIView, or NSView, to the renderable layer found at the Keypath + */ +- (void)addSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +/*! + @brief Adds a UIView, or NSView, to the parent renderable layer found at the Keypath and then masks the view with layer found at the keypath. + */ +- (void)maskSubview:(nonnull LOTView *)view + toKeypathLayer:(nonnull LOTKeypath *)keypath; + +#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR +@property (nonatomic) LOTViewContentMode contentMode; +#endif + +/*! + @brief Sets the keyframe value for a specific After Effects property at a given time. NOTE: Deprecated. Use setValueDelegate:forKeypath: + @discussion NOTE: Deprecated and non functioning. Use setValueDelegate:forKeypath: + @param value Value is the color, point, or number object that should be set at given time + @param keypath NSString . separate keypath The Keypath is a dot separated key path that specifies the location of the key to be set from the After Effects file. This will begin with the Layer Name. EG "Layer 1.Shape 1.Fill 1.Color" + @param frame The frame is the frame to be set. If the keyframe exists it will be overwritten, if it does not exist a new linearly interpolated keyframe will be added + */ +- (void)setValue:(nonnull id)value + forKeypath:(nonnull NSString *)keypath + atFrame:(nullable NSNumber *)frame __deprecated; + +/*! + @brief Adds a custom subview to the animation using a LayerName from After Effect as a reference point. + @discussion NOTE: Deprecated. Use addSubview:toKeypathLayer: or maskSubview:toKeypathLayer: + @param view The custom view instance to be added + + @param layer The string name of the After Effects layer to be referenced. + + @param applyTransform If YES the custom view will be animated to move with the specified After Effects layer. If NO the custom view will be masked by the After Effects layer + */ +- (void)addSubview:(nonnull LOTView *)view + toLayerNamed:(nonnull NSString *)layer + applyTransform:(BOOL)applyTransform __deprecated; + +/*! + @brief Converts the given CGRect from the receiving animation view's coordinate space to the supplied layer's coordinate space If layerName is null then the rect will be converted to the composition coordinate system. This is helpful when adding custom subviews to a LOTAnimationView + @discussion NOTE: Deprecated. Use convertRect:fromKeypathLayer: + */ +- (CGRect)convertRect:(CGRect)rect + toLayerNamed:(NSString *_Nullable)layerName __deprecated; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationView_Compat.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationView_Compat.h new file mode 100644 index 0000000..20cf2e7 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTAnimationView_Compat.h @@ -0,0 +1,36 @@ +// +// LOTAnimationView_Compat.h +// Lottie +// +// Created by Oleksii Pavlovskyi on 2/2/17. +// Copyright (c) 2017 Airbnb. All rights reserved. +// + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +#import +@compatibility_alias LOTView UIView; + +#else + +#import +@compatibility_alias LOTView NSView; + +typedef NS_ENUM(NSInteger, LOTViewContentMode) { + LOTViewContentModeScaleToFill, + LOTViewContentModeScaleAspectFit, + LOTViewContentModeScaleAspectFill, + LOTViewContentModeRedraw, + LOTViewContentModeCenter, + LOTViewContentModeTop, + LOTViewContentModeBottom, + LOTViewContentModeLeft, + LOTViewContentModeRight, + LOTViewContentModeTopLeft, + LOTViewContentModeTopRight, + LOTViewContentModeBottomLeft, + LOTViewContentModeBottomRight, +}; + +#endif + diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTBlockCallback.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTBlockCallback.h new file mode 100644 index 0000000..067ecc5 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTBlockCallback.h @@ -0,0 +1,160 @@ +// +// LOTBlockCallback.h +// Lottie +// +// Created by brandon_withrow on 12/15/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import +#import "LOTValueDelegate.h" + +/*! + @brief A block that is used to change a Color value at keytime, the block is called continuously for a keypath while the animation plays. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyFrame When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyFrame When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startColor The color from the previous keyframe in relation to the current time. + @param endColor The color from the next keyframe in relation to the current time. + @param interpolatedColor The color interpolated at the current time between startColor and endColor. This represents the keypaths current color for the current time. + @return CGColorRef the color to set the keypath node for the current frame + */ +typedef CGColorRef _Nonnull (^LOTColorValueCallbackBlock)(CGFloat currentFrame, + CGFloat startKeyFrame, + CGFloat endKeyFrame, + CGFloat interpolatedProgress, + CGColorRef _Nullable startColor, + CGColorRef _Nullable endColor, + CGColorRef _Nullable interpolatedColor); + +/*! + @brief A block that is used to change a Number value at keytime, the block is called continuously for a keypath while the animation plays. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyFrame When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyFrame When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startValue The Number from the previous keyframe in relation to the current time. + @param endValue The Number from the next keyframe in relation to the current time. + @param interpolatedValue The Number interpolated at the current time between startValue and endValue. This represents the keypaths current Number for the current time. + @return CGFloat the number to set the keypath node for the current frame + */ +typedef CGFloat (^LOTNumberValueCallbackBlock)(CGFloat currentFrame, + CGFloat startKeyFrame, + CGFloat endKeyFrame, + CGFloat interpolatedProgress, + CGFloat startValue, + CGFloat endValue, + CGFloat interpolatedValue); +/*! + @brief A block that is used to change a Point value at keytime, the block is called continuously for a keypath while the animation plays. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyFrame When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyFrame When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startPoint The Point from the previous keyframe in relation to the current time. + @param endPoint The Point from the next keyframe in relation to the current time. + @param interpolatedPoint The Point interpolated at the current time between startPoint and endPoint. This represents the keypaths current Point for the current time. + @return CGPoint the point to set the keypath node for the current frame. + */ +typedef CGPoint (^LOTPointValueCallbackBlock)(CGFloat currentFrame, + CGFloat startKeyFrame, + CGFloat endKeyFrame, + CGFloat interpolatedProgress, + CGPoint startPoint, + CGPoint endPoint, + CGPoint interpolatedPoint); + +/*! + @brief A block that is used to change a Size value at keytime, the block is called continuously for a keypath while the animation plays. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyFrame When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyFrame When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startSize The Size from the previous keyframe in relation to the current time. + @param endSize The Size from the next keyframe in relation to the current time. + @param interpolatedSize The Size interpolated at the current time between startSize and endSize. This represents the keypaths current Size for the current time. + @return CGSize the size to set the keypath node for the current frame. + */ +typedef CGSize (^LOTSizeValueCallbackBlock)(CGFloat currentFrame, + CGFloat startKeyFrame, + CGFloat endKeyFrame, + CGFloat interpolatedProgress, + CGSize startSize, + CGSize endSize, + CGSize interpolatedSize); + +/*! + @brief A block that is used to change a Path value at keytime, the block is called continuously for a keypath while the animation plays. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyFrame When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyFrame When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @return UIBezierPath the path to set the keypath node for the current frame. + */ +typedef CGPathRef _Nonnull (^LOTPathValueCallbackBlock)(CGFloat currentFrame, + CGFloat startKeyFrame, + CGFloat endKeyFrame, + CGFloat interpolatedProgress); + +/*! + @brief LOTColorValueCallback is wrapper around a LOTColorValueCallbackBlock. This block can be used in conjunction with LOTAnimationView setValueDelegate:forKeypath to dynamically change an animation's color keypath at runtime. + */ + +@interface LOTColorBlockCallback : NSObject + ++ (instancetype _Nonnull)withBlock:(LOTColorValueCallbackBlock _Nonnull )block NS_SWIFT_NAME(init(block:)); + +@property (nonatomic, copy, nonnull) LOTColorValueCallbackBlock callback; + +@end + +/*! + @brief LOTNumberValueCallback is wrapper around a LOTNumberValueCallbackBlock. This block can be used in conjunction with LOTAnimationView setValueDelegate:forKeypath to dynamically change an animation's number keypath at runtime. + */ + +@interface LOTNumberBlockCallback : NSObject + ++ (instancetype _Nonnull)withBlock:(LOTNumberValueCallbackBlock _Nonnull)block NS_SWIFT_NAME(init(block:)); + +@property (nonatomic, copy, nonnull) LOTNumberValueCallbackBlock callback; + +@end + +/*! + @brief LOTPointValueCallback is wrapper around a LOTPointValueCallbackBlock. This block can be used in conjunction with LOTAnimationView setValueDelegate:forKeypath to dynamically change an animation's point keypath at runtime. + */ + +@interface LOTPointBlockCallback : NSObject + ++ (instancetype _Nonnull)withBlock:(LOTPointValueCallbackBlock _Nonnull)block NS_SWIFT_NAME(init(block:)); + +@property (nonatomic, copy, nonnull) LOTPointValueCallbackBlock callback; + +@end + +/*! + @brief LOTSizeValueCallback is wrapper around a LOTSizeValueCallbackBlock. This block can be used in conjunction with LOTAnimationView setValueDelegate:forKeypath to dynamically change an animation's size keypath at runtime. + */ + +@interface LOTSizeBlockCallback : NSObject + ++ (instancetype _Nonnull)withBlock:(LOTSizeValueCallbackBlock _Nonnull)block NS_SWIFT_NAME(init(block:)); + +@property (nonatomic, copy, nonnull) LOTSizeValueCallbackBlock callback; + +@end + +/*! + @brief LOTPathValueCallback is wrapper around a LOTPathValueCallbackBlock. This block can be used in conjunction with LOTAnimationView setValueDelegate:forKeypath to dynamically change an animation's path keypath at runtime. + */ + +@interface LOTPathBlockCallback : NSObject + ++ (instancetype _Nonnull)withBlock:(LOTPathValueCallbackBlock _Nonnull)block NS_SWIFT_NAME(init(block:)); + +@property (nonatomic, copy, nonnull) LOTPathValueCallbackBlock callback; + +@end + diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h new file mode 100644 index 0000000..3857226 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTCacheProvider.h @@ -0,0 +1,40 @@ +// +// LOTCacheProvider.h +// Lottie +// +// Created by punmy on 2017/7/8. +// +// + +#import + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + +#import +@compatibility_alias LOTImage UIImage; + +@protocol LOTImageCache; + +#pragma mark - LOTCacheProvider + +@interface LOTCacheProvider : NSObject + ++ (id)imageCache; ++ (void)setImageCache:(id)cache; + +@end + +#pragma mark - LOTImageCache + +/** + This protocol represent the interface of a image cache which lottie can use. + */ +@protocol LOTImageCache + +@required +- (LOTImage *)imageForKey:(NSString *)key; +- (void)setImage:(LOTImage *)image forKey:(NSString *)key; + +@end + +#endif diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTComposition.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTComposition.h new file mode 100644 index 0000000..9fad038 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTComposition.h @@ -0,0 +1,49 @@ +// +// LOTScene.h +// LottieAnimator +// +// Created by Brandon Withrow on 12/14/15. +// Copyright © 2015 Brandon Withrow. All rights reserved. +// + +#import +#import + +@class LOTLayerGroup; +@class LOTLayer; +@class LOTAssetGroup; + +@interface LOTComposition : NSObject + +/// Load animation by name from the default bundle, Images are also loaded from the bundle ++ (nullable instancetype)animationNamed:(nonnull NSString *)animationName NS_SWIFT_NAME(init(name:)); + +/// Loads animation by name from specified bundle, Images are also loaded from the bundle ++ (nullable instancetype)animationNamed:(nonnull NSString *)animationName + inBundle:(nonnull NSBundle *)bundle NS_SWIFT_NAME(init(name:bundle:)); + +/// Loads an animation from a specific file path. WARNING Do not use a web URL for file path. ++ (nullable instancetype)animationWithFilePath:(nonnull NSString *)filePath NS_SWIFT_NAME(init(filePath:)); + +/// Creates an animation from the deserialized JSON Dictionary ++ (nonnull instancetype)animationFromJSON:(nonnull NSDictionary *)animationJSON NS_SWIFT_NAME(init(json:)); + +/// Creates an animation from the deserialized JSON Dictionary, images are loaded from the specified bundle ++ (nonnull instancetype)animationFromJSON:(nullable NSDictionary *)animationJSON + inBundle:(nullable NSBundle *)bundle NS_SWIFT_NAME(init(json:bundle:)); + +- (instancetype _Nonnull)initWithJSON:(NSDictionary * _Nullable)jsonDictionary + withAssetBundle:(NSBundle * _Nullable)bundle; + +@property (nonatomic, readonly) CGRect compBounds; +@property (nonatomic, strong, readonly, nullable) NSNumber *startFrame; +@property (nonatomic, strong, readonly, nullable) NSNumber *endFrame; +@property (nonatomic, strong, readonly, nullable) NSNumber *framerate; +@property (nonatomic, readonly) NSTimeInterval timeDuration; +@property (nonatomic, strong, readonly, nullable) LOTLayerGroup *layerGroup; +@property (nonatomic, strong, readonly, nullable) LOTAssetGroup *assetGroup; +@property (nonatomic, strong, readwrite, nullable) NSString *rootDirectory; +@property (nonatomic, strong, readonly, nullable) NSBundle *assetBundle; +@property (nonatomic, copy, nullable) NSString *cacheKey; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTInterpolatorCallback.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTInterpolatorCallback.h new file mode 100644 index 0000000..5d4b550 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTInterpolatorCallback.h @@ -0,0 +1,71 @@ +// +// LOTInterpolatorCallback.h +// Lottie +// +// Created by brandon_withrow on 12/15/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import +#import "LOTValueDelegate.h" + +/*! + @brief LOTPointInterpolatorCallback is a container for a CGPointRef. This container is a LOTPointValueDelegate that will return the point interpolated at currentProgress between fromPoint and toPoint. Externally changing currentProgress will change the point of the animation. + @discussion LOTPointInterpolatorCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeypoint to set a point value of an animation property. + */ + +@interface LOTPointInterpolatorCallback : NSObject + ++ (instancetype _Nonnull)withFromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint NS_SWIFT_NAME(init(from:to:)); + +@property (nonatomic) CGPoint fromPoint; +@property (nonatomic) CGPoint toPoint; + +/*! + @brief As currentProgress changes from 0 to 1 the point sent to the animation view is interpolated between fromPoint and toPoint. + */ + +@property (nonatomic, assign) CGFloat currentProgress; + +@end + +/*! + @brief LOTSizeInterpolatorCallback is a container for a CGSizeRef. This container is a LOTSizeValueDelegate that will return the size interpolated at currentProgress between fromSize and toSize. Externally changing currentProgress will change the size of the animation. + @discussion LOTSizeInterpolatorCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeysize to set a size value of an animation property. + */ + +@interface LOTSizeInterpolatorCallback : NSObject + ++ (instancetype _Nonnull)withFromSize:(CGSize)fromSize toSize:(CGSize)toSize NS_SWIFT_NAME(init(from:to:)); + +@property (nonatomic) CGSize fromSize; +@property (nonatomic) CGSize toSize; + +/*! + @brief As currentProgress changes from 0 to 1 the size sent to the animation view is interpolated between fromSize and toSize. + */ + +@property (nonatomic, assign) CGFloat currentProgress; + +@end + +/*! + @brief LOTFloatInterpolatorCallback is a container for a CGFloatRef. This container is a LOTFloatValueDelegate that will return the float interpolated at currentProgress between fromFloat and toFloat. Externally changing currentProgress will change the float of the animation. + @discussion LOTFloatInterpolatorCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeyfloat to set a float value of an animation property. + */ + +@interface LOTFloatInterpolatorCallback : NSObject + ++ (instancetype _Nonnull)withFromFloat:(CGFloat)fromFloat toFloat:(CGFloat)toFloat NS_SWIFT_NAME(init(from:to:)); + +@property (nonatomic) CGFloat fromFloat; +@property (nonatomic) CGFloat toFloat; + +/*! + @brief As currentProgress changes from 0 to 1 the float sent to the animation view is interpolated between fromFloat and toFloat. + */ + +@property (nonatomic, assign) CGFloat currentProgress; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTKeypath.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTKeypath.h new file mode 100644 index 0000000..9c5b7a4 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTKeypath.h @@ -0,0 +1,83 @@ +// +// LOTKeypath.h +// Lottie_iOS +// +// Created by brandon_withrow on 12/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import + +extern NSString * _Nonnull const kLOTKeypathEnd; + +/*! + @brief LOTKeypath is an object that describes a keypath search for nodes in the animation JSON. LOTKeypath matches views inside of LOTAnimationView to their After Effects counterparts. + + @discussion + LOTKeypath is used with LOTAnimationView to set animation properties dynamically at runtime, to add or mask subviews, converting geometry, and numerous other functions. + + LOTKeypath can describe a specific object, or can use wildcards for fuzzy matching of objects. Acceptable wildcards are either "*" (star) or "**" (double star). Single star will search a single depth for the next object, double star will search any depth. + + Read More at http://airbnb.io/lottie/ios/dynamic.html + + EG: + @"Layer.Shape Group.Stroke 1.Color" + Represents a specific color node on a specific stroke. + + @"**.Stroke 1.Color" + Represents the color node for every "Stroke 1" in the animation scene. + + */ + +@interface LOTKeypath : NSObject + +/*! + @brief Creates a LOTKeypath from a dot separated string, can use wildcards @"*" and fuzzy depth wild cards @"**". + + @discussion LOTKeypath is an object that describes a keypath search for nodes in the animation JSON. + + LOTKeypath is used with LOTAnimationView to set animation properties dynamically at runtime, to add or mask subviews, converting geometry, and numerous other functions. + + LOTKeypath can describe a specific object, or can use wildcards for fuzzy matching of objects. Acceptable wildcards are either "*" (star) or "**" (double star). Single star will search a single depth for the next object, double star will search any depth. + + @param keypath A dot separated string describing a keypath from the JSON animation. EG @"Layer.Shape Group.Stroke 1.Color" + + @return A new LOTKeypath + */ + ++ (nonnull LOTKeypath *)keypathWithString:(nonnull NSString *)keypath; + +/*! + @brief Creates a LOTKeypath from a list of keypath string objects, can use wildcards @"*" and fuzzy depth wild cards @"**". + + @discussion LOTKeypath is an object that describes a keypath search for nodes in the animation JSON. + + LOTKeypath is used with LOTAnimationView to set animation properties dynamically at runtime, to add or mask subviews, converting geometry, and numerous other functions. + + LOTKeypath can describe a specific object, or can use wildcards for fuzzy matching of objects. Acceptable wildcards are either "*" (star) or "**" (double star). Single star will search a single depth for the next object, double star will search any depth. + + @param firstKey A nil terminated list of strings describing a keypath. EG @"Layer", @"Shape Group", @"Stroke 1", @"Color", nil + + @return A new LOTKeypath + */ + ++ (nonnull LOTKeypath *)keypathWithKeys:(nonnull NSString *)firstKey, ... + NS_REQUIRES_NIL_TERMINATION; + +@property (nonatomic, readonly, nonnull) NSString *absoluteKeypath; +@property (nonatomic, readonly, nonnull) NSString *currentKey; +@property (nonatomic, readonly, nonnull) NSString *currentKeyPath; + +@property (nonatomic, readonly, nonnull) NSDictionary *searchResults; + +@property (nonatomic, readonly) BOOL hasFuzzyWildcard; +@property (nonatomic, readonly) BOOL hasWildcard; +@property (nonatomic, readonly) BOOL endOfKeypath; + +- (BOOL)pushKey:(nonnull NSString *)key; +- (void)popKey; +- (void)popToRootKey; + +- (void)addSearchResultForCurrentPath:(id _Nonnull)result; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTValueCallback.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTValueCallback.h new file mode 100644 index 0000000..05cb262 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTValueCallback.h @@ -0,0 +1,76 @@ +// +// LOTValueCallback.h +// Lottie +// +// Created by brandon_withrow on 12/15/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import +#import "LOTValueDelegate.h" + +/*! + @brief LOTColorValueCallback is a container for a CGColorRef. This container is a LOTColorValueDelegate that always returns the colorValue property to its animation delegate. + @discussion LOTColorValueCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeypath to set a color value of an animation property. + */ + +@interface LOTColorValueCallback : NSObject + ++ (instancetype _Nonnull)withCGColor:(CGColorRef _Nonnull)color NS_SWIFT_NAME(init(color:)); + +@property (nonatomic, nonnull) CGColorRef colorValue; + +@end + +/*! + @brief LOTNumberValueCallback is a container for a CGFloat value. This container is a LOTNumberValueDelegate that always returns the numberValue property to its animation delegate. + @discussion LOTNumberValueCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeypath to set a number value of an animation property. + */ + +@interface LOTNumberValueCallback : NSObject + ++ (instancetype _Nonnull)withFloatValue:(CGFloat)numberValue NS_SWIFT_NAME(init(number:)); + +@property (nonatomic, assign) CGFloat numberValue; + +@end + +/*! + @brief LOTPointValueCallback is a container for a CGPoint value. This container is a LOTPointValueDelegate that always returns the pointValue property to its animation delegate. + @discussion LOTPointValueCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeypath to set a point value of an animation property. + */ + +@interface LOTPointValueCallback : NSObject + ++ (instancetype _Nonnull)withPointValue:(CGPoint)pointValue; + +@property (nonatomic, assign) CGPoint pointValue; + +@end + +/*! + @brief LOTSizeValueCallback is a container for a CGSize value. This container is a LOTSizeValueDelegate that always returns the sizeValue property to its animation delegate. + @discussion LOTSizeValueCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeypath to set a size value of an animation property. + */ + +@interface LOTSizeValueCallback : NSObject + ++ (instancetype _Nonnull)withPointValue:(CGSize)sizeValue NS_SWIFT_NAME(init(size:)); + +@property (nonatomic, assign) CGSize sizeValue; + +@end + +/*! + @brief LOTPathValueCallback is a container for a CGPathRef value. This container is a LOTPathValueDelegate that always returns the pathValue property to its animation delegate. + @discussion LOTPathValueCallback is used in conjunction with LOTAnimationView setValueDelegate:forKeypath to set a path value of an animation property. + */ + +@interface LOTPathValueCallback : NSObject + ++ (instancetype _Nonnull)withCGPath:(CGPathRef _Nonnull)path NS_SWIFT_NAME(init(path:)); + +@property (nonatomic, nonnull) CGPathRef pathValue; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTValueDelegate.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTValueDelegate.h new file mode 100644 index 0000000..cdd5b64 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/LOTValueDelegate.h @@ -0,0 +1,144 @@ +// +// LOTValueDelegate.h +// Lottie +// +// Created by brandon_withrow on 1/5/18. +// Copyright © 2018 Airbnb. All rights reserved. +// + +#import +#import + +/*! + @brief LOTValueDelegate is not intended to be used directly. It is used for type safety. + @discussion LOTValueDelegates are used to dynamically change animation data at runtime. A delegate is set for a keypath, defined by LOTKeypath. While the animation is running the delegate is asked for the value for the keypath at each frame of the animation. The delegate is given the computed animation value for the the current frame. See LOTKeypath and the setValueDelegate:forKeypath method on LOTAnimationView. + + Prebuild delegates can be found in LOTBlockCallback, LOTInterpolatorCallback, and LOTValueCallback. These delegates allow direct setting and driving of an animated value. + See LOTColorValueDelegate, LOTNumberValueDelegate, LOTPointValueDelegate, LOTSizeValueDelegate, LOTPathValueDelegate. + */ + +@protocol LOTValueDelegate + +@end + +@protocol LOTColorValueDelegate +@required +/*! + @brief LOTColorValueDelegate is called at runtime to override the color value of a property in a LOTAnimation. The property is defined by at LOTKeypath. The delegate is set via setValueDelegate:forKeypath on LOTAnimationView. + @discussion LOTValueDelegates are used to dynamically change animation data at runtime. A delegate is set for a keypath, defined by LOTKeypath. While the animation is running the delegate is asked for the value for the keypath at each frame of the animation. The delegate is given the computed animation value for the the current frame. See LOTKeypath and the setValueDelegate:forKeypath method on LOTAnimationView. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyframe When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyframe When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startColor The color from the previous keyframe in relation to the current time. + @param endColor The color from the next keyframe in relation to the current time. + @param interpolatedColor The color interpolated at the current time between startColor and endColor. This represents the keypaths current color for the current time. + @return CGColorRef the color to set the keypath node for the current frame + */ + +- (CGColorRef)colorForFrame:(CGFloat)currentFrame + startKeyframe:(CGFloat)startKeyframe + endKeyframe:(CGFloat)endKeyframe + interpolatedProgress:(CGFloat)interpolatedProgress + startColor:(CGColorRef)startColor + endColor:(CGColorRef)endColor + currentColor:(CGColorRef)interpolatedColor; + + +@end + +@protocol LOTNumberValueDelegate +@required +/*! + @brief LOTNumberValueDelegate is called at runtime to override the number value of a property in a LOTAnimation. The property is defined by at LOTKeypath. The delegate is set via setValueDelegate:forKeypath on LOTAnimationView. + @discussion LOTValueDelegates are used to dynamically change animation data at runtime. A delegate is set for a keypath, defined by LOTKeypath. While the animation is running the delegate is asked for the value for the keypath at each frame of the animation. The delegate is given the computed animation value for the the current frame. See LOTKeypath and the setValueDelegate:forKeypath method on LOTAnimationView. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyframe When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyframe When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startValue The number from the previous keyframe in relation to the current time. + @param endValue The number from the next keyframe in relation to the current time. + @param interpolatedValue The number interpolated at the current time between startNumber and endNumber. This represents the keypaths current number for the current time. + @return CGFloat the number to set the keypath node for the current frame + */ + +- (CGFloat)floatValueForFrame:(CGFloat)currentFrame + startKeyframe:(CGFloat)startKeyframe + endKeyframe:(CGFloat)endKeyframe + interpolatedProgress:(CGFloat)interpolatedProgress + startValue:(CGFloat)startValue + endValue:(CGFloat)endValue + currentValue:(CGFloat)interpolatedValue; + +@end + +@protocol LOTPointValueDelegate +@required +/*! + @brief LOTPointValueDelegate is called at runtime to override the point value of a property in a LOTAnimation. The property is defined by at LOTKeypath. The delegate is set via setValueDelegate:forKeypath on LOTAnimationView. + @discussion LOTValueDelegates are used to dynamically change animation data at runtime. A delegate is set for a keypath, defined by LOTKeypath. While the animation is running the delegate is asked for the value for the keypath at each frame of the animation. The delegate is given the computed animation value for the the current frame. See LOTKeypath and the setValueDelegate:forKeypath method on LOTAnimationView. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyframe When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyframe When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startPoint The point from the previous keyframe in relation to the current time. + @param endPoint The point from the next keyframe in relation to the current time. + @param interpolatedPoint The point interpolated at the current time between startPoint and endPoint. This represents the keypaths current point for the current time. + @return CGPoint the point to set the keypath node for the current frame + */ + +- (CGPoint)pointForFrame:(CGFloat)currentFrame + startKeyframe:(CGFloat)startKeyframe + endKeyframe:(CGFloat)endKeyframe + interpolatedProgress:(CGFloat)interpolatedProgress + startPoint:(CGPoint)startPoint + endPoint:(CGPoint)endPoint + currentPoint:(CGPoint)interpolatedPoint; + +@end + +@protocol LOTSizeValueDelegate +@required +/*! + @brief LOTSizeValueDelegate is called at runtime to override the size value of a property in a LOTAnimation. The property is defined by at LOTKeypath. The delegate is set via setValueDelegate:forKeypath on LOTAnimationView. + @discussion LOTValueDelegates are used to dynamically change animation data at runtime. A delegate is set for a keypath, defined by LOTKeypath. While the animation is running the delegate is asked for the value for the keypath at each frame of the animation. The delegate is given the computed animation value for the the current frame. See LOTKeypath and the setValueDelegate:forKeypath method on LOTAnimationView. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyframe When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyframe When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @param startSize The size from the previous keyframe in relation to the current time. + @param endSize The size from the next keyframe in relation to the current time. + @param interpolatedSize The size interpolated at the current time between startSize and endSize. This represents the keypaths current size for the current time. + @return CGSize the size to set the keypath node for the current frame + */ + +- (CGSize)sizeForFrame:(CGFloat)currentFrame + startKeyframe:(CGFloat)startKeyframe + endKeyframe:(CGFloat)endKeyframe + interpolatedProgress:(CGFloat)interpolatedProgress + startSize:(CGSize)startSize + endSize:(CGSize)endSize + currentSize:(CGSize)interpolatedSize; + + +@end + +@protocol LOTPathValueDelegate +@required +/*! + @brief LOTPathValueDelegate is called at runtime to override the path value of a property in a LOTAnimation. The property is defined by at LOTKeypath. The delegate is set via setValueDelegate:forKeypath on LOTAnimationView. + @discussion LOTValueDelegates are used to dynamically change animation data at runtime. A delegate is set for a keypath, defined by LOTKeypath. While the animation is running the delegate is asked for the value for the keypath at each frame of the animation. The delegate is given the computed animation value for the the current frame. See LOTKeypath and the setValueDelegate:forKeypath method on LOTAnimationView. + @param currentFrame The current frame of the animation in the parent compositions time space. + @param startKeyframe When the block is called, startFrame is the most recent keyframe for the keypath in relation to the current time. + @param endKeyframe When the block is called, endFrame is the next keyframe for the keypath in relation to the current time. + @param interpolatedProgress A value from 0-1 that represents the current progress between keyframes. It respects the keyframes current easing curves. + @return CGPathRef the path to set the keypath node for the current frame + */ + +- (CGPathRef)pathForFrame:(CGFloat)currentFrame + startKeyframe:(CGFloat)startKeyframe + endKeyframe:(CGFloat)endKeyframe + interpolatedProgress:(CGFloat)interpolatedProgress; + + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/Lottie.h b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/Lottie.h new file mode 100644 index 0000000..161ef31 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/PublicHeaders/Lottie.h @@ -0,0 +1,44 @@ +// +// Lottie.h +// Pods +// +// Created by brandon_withrow on 1/27/17. +// +// Dream Big. + +#if __has_feature(modules) +@import Foundation; +#else +#import +#endif + +#ifndef Lottie_h +#define Lottie_h + +//! Project version number for Lottie. +FOUNDATION_EXPORT double LottieVersionNumber; + +//! Project version string for Lottie. +FOUNDATION_EXPORT const unsigned char LottieVersionString[]; + +#include + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR +#import "LOTAnimationTransitionController.h" +#import "LOTAnimatedSwitch.h" +#import "LOTAnimatedControl.h" +#endif + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR +#import "LOTCacheProvider.h" +#endif + +#import "LOTAnimationView.h" +#import "LOTAnimationCache.h" +#import "LOTComposition.h" +#import "LOTBlockCallback.h" +#import "LOTInterpolatorCallback.h" +#import "LOTValueCallback.h" +#import "LOTValueDelegate.h" + +#endif /* Lottie_h */ diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h new file mode 100644 index 0000000..5abafc0 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h @@ -0,0 +1,17 @@ +// +// LOTCircleAnimator.h +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatorNode.h" +#import "LOTShapeCircle.h" + +@interface LOTCircleAnimator : LOTAnimatorNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeCircle:(LOTShapeCircle *_Nonnull)shapeCircle; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m new file mode 100644 index 0000000..44c587d --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m @@ -0,0 +1,77 @@ +// +// LOTCircleAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTCircleAnimator.h" +#import "LOTPointInterpolator.h" + +const CGFloat kLOTEllipseControlPointPercentage = 0.55228; + +@implementation LOTCircleAnimator { + LOTPointInterpolator *_centerInterpolator; + LOTPointInterpolator *_sizeInterpolator; + BOOL _reversed; +} + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeCircle:(LOTShapeCircle *_Nonnull)shapeCircle { + self = [super initWithInputNode:inputNode keyName:shapeCircle.keyname]; + if (self) { + _centerInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeCircle.position.keyframes]; + _sizeInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeCircle.size.keyframes]; + _reversed = shapeCircle.reversed; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Size" : _sizeInterpolator, + @"Position" : _centerInterpolator}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return [_centerInterpolator hasUpdateForFrame:frame] || [_sizeInterpolator hasUpdateForFrame:frame]; +} + +- (void)performLocalUpdate { + // Unfortunately we HAVE to manually build out the ellipse. + // Every Apple method constructs from the 3 o-clock position + // After effects constructs from the Noon position. + // After effects does clockwise, but also has a flag for reversed. + CGPoint center = [_centerInterpolator pointValueForFrame:self.currentFrame]; + CGPoint size = [_sizeInterpolator pointValueForFrame:self.currentFrame]; + + CGFloat halfWidth = size.x / 2; + CGFloat halfHeight = size.y / 2; + + if (_reversed) { + halfWidth = halfWidth * -1; + } + + CGPoint circleQ1 = CGPointMake(center.x, center.y - halfHeight); + CGPoint circleQ2 = CGPointMake(center.x + halfWidth, center.y); + CGPoint circleQ3 = CGPointMake(center.x, center.y + halfHeight); + CGPoint circleQ4 = CGPointMake(center.x - halfWidth, center.y); + + CGFloat cpW = halfWidth * kLOTEllipseControlPointPercentage; + CGFloat cpH = halfHeight * kLOTEllipseControlPointPercentage; + + LOTBezierPath *path = [[LOTBezierPath alloc] init]; + path.cacheLengths = self.pathShouldCacheLengths; + [path LOT_moveToPoint:circleQ1]; + [path LOT_addCurveToPoint:circleQ2 controlPoint1:CGPointMake(circleQ1.x + cpW, circleQ1.y) controlPoint2:CGPointMake(circleQ2.x, circleQ2.y - cpH)]; + + [path LOT_addCurveToPoint:circleQ3 controlPoint1:CGPointMake(circleQ2.x, circleQ2.y + cpH) controlPoint2:CGPointMake(circleQ3.x + cpW, circleQ3.y)]; + + [path LOT_addCurveToPoint:circleQ4 controlPoint1:CGPointMake(circleQ3.x - cpW, circleQ3.y) controlPoint2:CGPointMake(circleQ4.x, circleQ4.y + cpH)]; + + [path LOT_addCurveToPoint:circleQ1 controlPoint1:CGPointMake(circleQ4.x, circleQ4.y - cpH) controlPoint2:CGPointMake(circleQ1.x - cpW, circleQ1.y)]; + + self.localPath = path; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h new file mode 100644 index 0000000..2479130 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h @@ -0,0 +1,17 @@ +// +// LOTPathAnimator.h +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTAnimatorNode.h" +#import "LOTShapePath.h" + +@interface LOTPathAnimator : LOTAnimatorNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapePath:(LOTShapePath *_Nonnull)shapePath; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m new file mode 100644 index 0000000..2c0662a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m @@ -0,0 +1,39 @@ +// +// LOTPathAnimator.m +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTPathAnimator.h" +#import "LOTPathInterpolator.h" + +@implementation LOTPathAnimator { + LOTShapePath *_pathConent; + LOTPathInterpolator *_interpolator; +} + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapePath:(LOTShapePath *_Nonnull)shapePath { + self = [super initWithInputNode:inputNode keyName:shapePath.keyname]; + if (self) { + _pathConent = shapePath; + _interpolator = [[LOTPathInterpolator alloc] initWithKeyframes:_pathConent.shapePath.keyframes]; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Path" : _interpolator}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return [_interpolator hasUpdateForFrame:frame]; +} + +- (void)performLocalUpdate { + self.localPath = [_interpolator pathForFrame:self.currentFrame cacheLengths:self.pathShouldCacheLengths]; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h new file mode 100644 index 0000000..2822998 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h @@ -0,0 +1,17 @@ +// +// LOTPolygonAnimator.h +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatorNode.h" +#import "LOTShapeStar.h" + +@interface LOTPolygonAnimator : LOTAnimatorNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapePolygon:(LOTShapeStar *_Nonnull)shapeStar; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m new file mode 100644 index 0000000..99310f0 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m @@ -0,0 +1,110 @@ +// +// LOTPolygonAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPolygonAnimator.h" +#import "LOTKeyframe.h" +#import "LOTPointInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "LOTBezierPath.h" +#import "CGGeometry+LOTAdditions.h" + +const CGFloat kPOLYGON_MAGIC_NUMBER = .25f; + +@implementation LOTPolygonAnimator { + LOTNumberInterpolator *_outerRadiusInterpolator; + LOTNumberInterpolator *_outerRoundnessInterpolator; + LOTPointInterpolator *_positionInterpolator; + LOTNumberInterpolator *_pointsInterpolator; + LOTNumberInterpolator *_rotationInterpolator; +} + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapePolygon:(LOTShapeStar *_Nonnull)shapeStar { + self = [super initWithInputNode:inputNode keyName:shapeStar.keyname]; + if (self) { + _outerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRadius.keyframes]; + _outerRoundnessInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRoundness.keyframes]; + _pointsInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.numberOfPoints.keyframes]; + _rotationInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.rotation.keyframes]; + _positionInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeStar.position.keyframes]; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Points" : _pointsInterpolator, + @"Position" : _positionInterpolator, + @"Rotation" : _rotationInterpolator, + @"Outer Radius" : _outerRadiusInterpolator, + @"Outer Roundness" : _outerRoundnessInterpolator}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return ([_outerRadiusInterpolator hasUpdateForFrame:frame] || + [_outerRoundnessInterpolator hasUpdateForFrame:frame] || + [_pointsInterpolator hasUpdateForFrame:frame] || + [_rotationInterpolator hasUpdateForFrame:frame] || + [_positionInterpolator hasUpdateForFrame:frame]); +} + +- (void)performLocalUpdate { + CGFloat outerRadius = [_outerRadiusInterpolator floatValueForFrame:self.currentFrame]; + CGFloat outerRoundness = [_outerRoundnessInterpolator floatValueForFrame:self.currentFrame] / 100.f; + CGFloat points = [_pointsInterpolator floatValueForFrame:self.currentFrame]; + CGFloat rotation = [_rotationInterpolator floatValueForFrame:self.currentFrame]; + CGPoint position = [_positionInterpolator pointValueForFrame:self.currentFrame]; + + LOTBezierPath *path = [[LOTBezierPath alloc] init]; + path.cacheLengths = self.pathShouldCacheLengths; + CGFloat currentAngle = LOT_DegreesToRadians(rotation - 90); + CGFloat anglePerPoint = (CGFloat)((2 * M_PI) / points); + + CGFloat x; + CGFloat y; + CGFloat previousX; + CGFloat previousY; + x = (CGFloat) (outerRadius * cosf(currentAngle)); + y = (CGFloat) (outerRadius * sinf(currentAngle)); + [path LOT_moveToPoint:CGPointMake(x, y)]; + currentAngle += anglePerPoint; + + double numPoints = ceil(points); + for (int i = 0; i < numPoints; i++) { + previousX = x; + previousY = y; + x = (CGFloat) (outerRadius * cosf(currentAngle)); + y = (CGFloat) (outerRadius * sinf(currentAngle)); + + if (outerRoundness != 0) { + CGFloat cp1Theta = (CGFloat) (atan2(previousY, previousX) - M_PI / 2.f); + CGFloat cp1Dx = (CGFloat) cosf(cp1Theta); + CGFloat cp1Dy = (CGFloat) sinf(cp1Theta); + + CGFloat cp2Theta = (CGFloat) (atan2(y, x) - M_PI / 2.f); + CGFloat cp2Dx = (CGFloat) cosf(cp2Theta); + CGFloat cp2Dy = (CGFloat) sinf(cp2Theta); + + CGFloat cp1x = outerRadius * outerRoundness * kPOLYGON_MAGIC_NUMBER * cp1Dx; + CGFloat cp1y = outerRadius * outerRoundness * kPOLYGON_MAGIC_NUMBER * cp1Dy; + CGFloat cp2x = outerRadius * outerRoundness * kPOLYGON_MAGIC_NUMBER * cp2Dx; + CGFloat cp2y = outerRadius * outerRoundness * kPOLYGON_MAGIC_NUMBER * cp2Dy; + [path LOT_addCurveToPoint:CGPointMake(x, y) + controlPoint1:CGPointMake(previousX - cp1x, previousY - cp1y) + controlPoint2:CGPointMake(x + cp2x, y + cp2y)]; + } else { + [path LOT_addLineToPoint:CGPointMake(x, y)]; + } + + currentAngle += anglePerPoint; + } + [path LOT_closePath]; + [path LOT_applyTransform:CGAffineTransformMakeTranslation(position.x, position.y)]; + self.localPath = path; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h new file mode 100644 index 0000000..17334eb --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h @@ -0,0 +1,17 @@ +// +// LOTPolystarAnimator.h +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatorNode.h" +#import "LOTShapeStar.h" + +@interface LOTPolystarAnimator : LOTAnimatorNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeStar:(LOTShapeStar *_Nonnull)shapeStar; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m new file mode 100644 index 0000000..c624a60 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m @@ -0,0 +1,156 @@ +// +// LOTPolystarAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPolystarAnimator.h" +#import "LOTPointInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "LOTBezierPath.h" +#import "CGGeometry+LOTAdditions.h" + +const CGFloat kPOLYSTAR_MAGIC_NUMBER = .47829f; + +@implementation LOTPolystarAnimator { + LOTNumberInterpolator *_outerRadiusInterpolator; + LOTNumberInterpolator *_innerRadiusInterpolator; + LOTNumberInterpolator *_outerRoundnessInterpolator; + LOTNumberInterpolator *_innerRoundnessInterpolator; + LOTPointInterpolator *_positionInterpolator; + LOTNumberInterpolator *_pointsInterpolator; + LOTNumberInterpolator *_rotationInterpolator; +} + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeStar:(LOTShapeStar *_Nonnull)shapeStar { + self = [super initWithInputNode:inputNode keyName:shapeStar.keyname]; + if (self) { + _outerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRadius.keyframes]; + _innerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.innerRadius.keyframes]; + _outerRoundnessInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRoundness.keyframes]; + _innerRoundnessInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.innerRoundness.keyframes]; + _pointsInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.numberOfPoints.keyframes]; + _rotationInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.rotation.keyframes]; + _positionInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeStar.position.keyframes]; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Points" : _pointsInterpolator, + @"Position" : _positionInterpolator, + @"Rotation" : _rotationInterpolator, + @"Inner Radius" : _innerRadiusInterpolator, + @"Outer Radius" : _outerRadiusInterpolator, + @"Inner Roundness" : _innerRoundnessInterpolator, + @"Outer Roundness" : _outerRoundnessInterpolator}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return ([_outerRadiusInterpolator hasUpdateForFrame:frame] || + [_innerRadiusInterpolator hasUpdateForFrame:frame] || + [_outerRoundnessInterpolator hasUpdateForFrame:frame] || + [_innerRoundnessInterpolator hasUpdateForFrame:frame] || + [_pointsInterpolator hasUpdateForFrame:frame] || + [_rotationInterpolator hasUpdateForFrame:frame] || + [_positionInterpolator hasUpdateForFrame:frame]); +} + +- (void)performLocalUpdate { + CGFloat outerRadius = [_outerRadiusInterpolator floatValueForFrame:self.currentFrame]; + CGFloat innerRadius = [_innerRadiusInterpolator floatValueForFrame:self.currentFrame]; + CGFloat outerRoundness = [_outerRoundnessInterpolator floatValueForFrame:self.currentFrame] / 100.f; + CGFloat innerRoundness = [_innerRoundnessInterpolator floatValueForFrame:self.currentFrame] / 100.f; + CGFloat points = [_pointsInterpolator floatValueForFrame:self.currentFrame]; + CGFloat rotation = [_rotationInterpolator floatValueForFrame:self.currentFrame]; + CGPoint position = [_positionInterpolator pointValueForFrame:self.currentFrame]; + LOTBezierPath *path = [[LOTBezierPath alloc] init]; + path.cacheLengths = self.pathShouldCacheLengths; + CGFloat currentAngle = LOT_DegreesToRadians(rotation - 90); + CGFloat anglePerPoint = (CGFloat)((2 * M_PI) / points); + CGFloat halfAnglePerPoint = anglePerPoint / 2.0f; + CGFloat partialPointAmount = points - floor(points); + if (partialPointAmount != 0) { + currentAngle += halfAnglePerPoint * (1.f - partialPointAmount); + } + + CGFloat x; + CGFloat y; + CGFloat previousX; + CGFloat previousY; + CGFloat partialPointRadius = 0; + if (partialPointAmount != 0) { + partialPointRadius = innerRadius + partialPointAmount * (outerRadius - innerRadius); + x = (CGFloat) (partialPointRadius * cosf(currentAngle)); + y = (CGFloat) (partialPointRadius * sinf(currentAngle)); + [path LOT_moveToPoint:CGPointMake(x, y)]; + currentAngle += anglePerPoint * partialPointAmount / 2.f; + } else { + x = (float) (outerRadius * cosf(currentAngle)); + y = (float) (outerRadius * sinf(currentAngle)); + [path LOT_moveToPoint:CGPointMake(x, y)]; + currentAngle += halfAnglePerPoint; + } + + // True means the line will go to outer radius. False means inner radius. + BOOL longSegment = false; + CGFloat numPoints = ceil(points) * 2; + for (int i = 0; i < numPoints; i++) { + CGFloat radius = longSegment ? outerRadius : innerRadius; + CGFloat dTheta = halfAnglePerPoint; + if (partialPointRadius != 0 && i == numPoints - 2) { + dTheta = anglePerPoint * partialPointAmount / 2.f; + } + if (partialPointRadius != 0 && i == numPoints - 1) { + radius = partialPointRadius; + } + previousX = x; + previousY = y; + x = (CGFloat) (radius * cosf(currentAngle)); + y = (CGFloat) (radius * sinf(currentAngle)); + + if (innerRoundness == 0 && outerRoundness == 0) { + [path LOT_addLineToPoint:CGPointMake(x, y)]; + } else { + CGFloat cp1Theta = (CGFloat) (atan2f(previousY, previousX) - M_PI / 2.f); + CGFloat cp1Dx = (CGFloat) cosf(cp1Theta); + CGFloat cp1Dy = (CGFloat) sinf(cp1Theta); + + CGFloat cp2Theta = (CGFloat) (atan2f(y, x) - M_PI / 2.f); + CGFloat cp2Dx = (CGFloat) cosf(cp2Theta); + CGFloat cp2Dy = (CGFloat) sinf(cp2Theta); + + CGFloat cp1Roundedness = longSegment ? innerRoundness : outerRoundness; + CGFloat cp2Roundedness = longSegment ? outerRoundness : innerRoundness; + CGFloat cp1Radius = longSegment ? innerRadius : outerRadius; + CGFloat cp2Radius = longSegment ? outerRadius : innerRadius; + + CGFloat cp1x = cp1Radius * cp1Roundedness * kPOLYSTAR_MAGIC_NUMBER * cp1Dx; + CGFloat cp1y = cp1Radius * cp1Roundedness * kPOLYSTAR_MAGIC_NUMBER * cp1Dy; + CGFloat cp2x = cp2Radius * cp2Roundedness * kPOLYSTAR_MAGIC_NUMBER * cp2Dx; + CGFloat cp2y = cp2Radius * cp2Roundedness * kPOLYSTAR_MAGIC_NUMBER * cp2Dy; + if (partialPointAmount != 0) { + if (i == 0) { + cp1x *= partialPointAmount; + cp1y *= partialPointAmount; + } else if (i == numPoints - 1) { + cp2x *= partialPointAmount; + cp2y *= partialPointAmount; + } + } + [path LOT_addCurveToPoint:CGPointMake(x, y) + controlPoint1:CGPointMake(previousX - cp1x, previousY - cp1y) + controlPoint2:CGPointMake(x + cp2x, y + cp2y)]; + } + currentAngle += dTheta; + longSegment = !longSegment; + } + [path LOT_closePath]; + [path LOT_applyTransform:CGAffineTransformMakeTranslation(position.x, position.y)]; + self.localPath = path; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h new file mode 100644 index 0000000..8bc5ddb --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h @@ -0,0 +1,18 @@ +// +// LOTRoundedRectAnimator.h +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatorNode.h" +#import "LOTShapeRectangle.h" + +@interface LOTRoundedRectAnimator : LOTAnimatorNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeRectangle:(LOTShapeRectangle *_Nonnull)shapeRectangle; + + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m new file mode 100644 index 0000000..30209d9 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m @@ -0,0 +1,147 @@ +// +// LOTRoundedRectAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRoundedRectAnimator.h" +#import "LOTPointInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTRoundedRectAnimator { + LOTPointInterpolator *_centerInterpolator; + LOTPointInterpolator *_sizeInterpolator; + LOTNumberInterpolator *_cornerRadiusInterpolator; + BOOL _reversed; +} + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeRectangle:(LOTShapeRectangle *_Nonnull)shapeRectangle { + self = [super initWithInputNode:inputNode keyName:shapeRectangle.keyname]; + if (self) { + _centerInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeRectangle.position.keyframes]; + _sizeInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeRectangle.size.keyframes]; + _cornerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeRectangle.cornerRadius.keyframes]; + _reversed = shapeRectangle.reversed; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Size" : _sizeInterpolator, + @"Position" : _centerInterpolator, + @"Roundness" : _cornerRadiusInterpolator}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return [_centerInterpolator hasUpdateForFrame:frame] || [_sizeInterpolator hasUpdateForFrame:frame] || [_cornerRadiusInterpolator hasUpdateForFrame:frame]; +} + +- (void)addCorner:(CGPoint)cornerPoint withRadius:(CGFloat)radius toPath:(LOTBezierPath *)path clockwise:(BOOL)clockwise { + CGPoint currentPoint = path.currentPoint; + + CGFloat ellipseControlPointPercentage = 0.55228; + + if (cornerPoint.y == currentPoint.y) { + // Moving east/west + if (cornerPoint.x < currentPoint.x) { + // Moving west + CGPoint corner = CGPointMake(cornerPoint.x + radius, currentPoint.y); + [path LOT_addLineToPoint:corner]; + if (radius) { + CGPoint curvePoint = clockwise ? CGPointMake(cornerPoint.x, cornerPoint.y - radius) : CGPointMake(cornerPoint.x, cornerPoint.y + radius); + CGPoint cp1 = CGPointMake(corner.x - (radius * ellipseControlPointPercentage), corner.y); + CGPoint cp2 = (clockwise ? + CGPointMake(curvePoint.x, curvePoint.y + (radius * ellipseControlPointPercentage)) : + CGPointMake(curvePoint.x, curvePoint.y - (radius * ellipseControlPointPercentage))); + [path LOT_addCurveToPoint:curvePoint controlPoint1:cp1 controlPoint2:cp2]; + } + } else { + // Moving east + CGPoint corner = CGPointMake(cornerPoint.x - radius, currentPoint.y); + [path LOT_addLineToPoint:corner]; + if (radius) { + CGPoint curvePoint = clockwise ? CGPointMake(cornerPoint.x, cornerPoint.y + radius) : CGPointMake(cornerPoint.x, cornerPoint.y - radius); + CGPoint cp1 = CGPointMake(corner.x + (radius * ellipseControlPointPercentage), corner.y); + CGPoint cp2 = (clockwise ? + CGPointMake(curvePoint.x, curvePoint.y - (radius * ellipseControlPointPercentage)) : + CGPointMake(curvePoint.x, curvePoint.y + (radius * ellipseControlPointPercentage))); + [path LOT_addCurveToPoint:curvePoint controlPoint1:cp1 controlPoint2:cp2]; + } + } + } else { + // Moving North/South + if (cornerPoint.y < currentPoint.y) { + // Moving North + CGPoint corner = CGPointMake(currentPoint.x, cornerPoint.y + radius); + [path LOT_addLineToPoint:corner]; + if (radius) { + CGPoint curvePoint = clockwise ? CGPointMake(cornerPoint.x + radius, cornerPoint.y) : CGPointMake(cornerPoint.x - radius, cornerPoint.y); + CGPoint cp1 = CGPointMake(corner.x, corner.y - (radius * ellipseControlPointPercentage)); + CGPoint cp2 = (clockwise ? + CGPointMake(curvePoint.x - (radius * ellipseControlPointPercentage), curvePoint.y) : + CGPointMake(curvePoint.x + (radius * ellipseControlPointPercentage), curvePoint.y)); + [path LOT_addCurveToPoint:curvePoint controlPoint1:cp1 controlPoint2:cp2]; + } + + } else { + // moving south + CGPoint corner = CGPointMake(currentPoint.x, cornerPoint.y - radius); + [path LOT_addLineToPoint:corner]; + if (radius) { + CGPoint curvePoint = clockwise ? CGPointMake(cornerPoint.x - radius, cornerPoint.y) : CGPointMake(cornerPoint.x + radius, cornerPoint.y); + CGPoint cp1 = CGPointMake(corner.x, corner.y + (radius * ellipseControlPointPercentage)); + CGPoint cp2 = (clockwise ? + CGPointMake(curvePoint.x + (radius * ellipseControlPointPercentage), curvePoint.y) : + CGPointMake(curvePoint.x - (radius * ellipseControlPointPercentage), curvePoint.y)); + [path LOT_addCurveToPoint:curvePoint controlPoint1:cp1 controlPoint2:cp2]; + } + } + } +} + +- (void)performLocalUpdate { + CGFloat cornerRadius = [_cornerRadiusInterpolator floatValueForFrame:self.currentFrame]; + CGPoint size = [_sizeInterpolator pointValueForFrame:self.currentFrame]; + CGPoint position = [_centerInterpolator pointValueForFrame:self.currentFrame]; + + CGFloat halfWidth = size.x / 2; + CGFloat halfHeight = size.y / 2; + + CGRect rectFrame = CGRectMake(position.x - halfWidth, position.y - halfHeight, size.x, size.y); + + CGPoint topLeft = CGPointMake(CGRectGetMinX(rectFrame), CGRectGetMinY(rectFrame)); + CGPoint topRight = CGPointMake(CGRectGetMaxX(rectFrame), CGRectGetMinY(rectFrame)); + CGPoint bottomLeft = CGPointMake(CGRectGetMinX(rectFrame), CGRectGetMaxY(rectFrame)); + CGPoint bottomRight = CGPointMake(CGRectGetMaxX(rectFrame), CGRectGetMaxY(rectFrame)); + // UIBezierPath Draws rects from the top left corner, After Effects draws them from the top right. + // Switching to manual drawing. + + CGFloat radius = MIN(MIN(halfWidth, halfHeight), cornerRadius); + BOOL clockWise = !_reversed; + + LOTBezierPath *path1 = [[LOTBezierPath alloc] init]; + path1.cacheLengths = self.pathShouldCacheLengths; + CGPoint startPoint = (clockWise ? + CGPointMake(topRight.x, topRight.y + radius) : + CGPointMake(topRight.x - radius, topRight.y)); + [path1 LOT_moveToPoint:startPoint]; + if (clockWise) { + [self addCorner:bottomRight withRadius:radius toPath:path1 clockwise:clockWise]; + [self addCorner:bottomLeft withRadius:radius toPath:path1 clockwise:clockWise]; + [self addCorner:topLeft withRadius:radius toPath:path1 clockwise:clockWise]; + [self addCorner:topRight withRadius:radius toPath:path1 clockwise:clockWise]; + } else { + [self addCorner:topLeft withRadius:radius toPath:path1 clockwise:clockWise]; + [self addCorner:bottomLeft withRadius:radius toPath:path1 clockwise:clockWise]; + [self addCorner:bottomRight withRadius:radius toPath:path1 clockwise:clockWise]; + [self addCorner:topRight withRadius:radius toPath:path1 clockwise:clockWise]; + } + [path1 LOT_closePath]; + self.localPath = path1; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h new file mode 100644 index 0000000..a0d57df --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h @@ -0,0 +1,19 @@ +// +// LOTArrayInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTArrayInterpolator : LOTValueInterpolator + +- (NSArray *)numberArrayForFrame:(NSNumber *)frame; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.m new file mode 100644 index 0000000..a1ab152 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.m @@ -0,0 +1,32 @@ +// +// LOTArrayInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTArrayInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTArrayInterpolator + +- (NSArray *)numberArrayForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + if (progress == 0) { + return self.leadingKeyframe.arrayValue; + } + if (progress == 1) { + return self.trailingKeyframe.arrayValue; + } + NSMutableArray *returnArray = [NSMutableArray array]; + for (int i = 0; i < self.leadingKeyframe.arrayValue.count; i ++) { + CGFloat from = [(NSNumber *)self.leadingKeyframe.arrayValue[i] floatValue]; + CGFloat to = [(NSNumber *)self.trailingKeyframe.arrayValue[i] floatValue]; + CGFloat value = LOT_RemapValue(progress, 0, 1, from, to); + [returnArray addObject:@(value)]; + } + return returnArray; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h new file mode 100644 index 0000000..5d6009f --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h @@ -0,0 +1,23 @@ +// +// LOTColorInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" +#import "LOTPlatformCompat.h" +#import "LOTValueDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTColorInterpolator : LOTValueInterpolator + +- (CGColorRef)colorForFrame:(NSNumber *)frame; + +@property (nonatomic, weak, nullable) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m new file mode 100644 index 0000000..ae10f8a --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m @@ -0,0 +1,48 @@ +// +// LOTColorInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTColorInterpolator.h" +#import "LOTPlatformCompat.h" +#import "UIColor+Expanded.h" + +@implementation LOTColorInterpolator + +- (CGColorRef)colorForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + UIColor *returnColor; + + if (progress == 0) { + returnColor = self.leadingKeyframe.colorValue; + } else if (progress == 1) { + returnColor = self.trailingKeyframe.colorValue; + } else { + returnColor = [UIColor LOT_colorByLerpingFromColor:self.leadingKeyframe.colorValue toColor:self.trailingKeyframe.colorValue amount:progress]; + } + if (self.hasDelegateOverride) { + return [self.delegate colorForFrame:frame.floatValue + startKeyframe:self.leadingKeyframe.keyframeTime.floatValue + endKeyframe:self.trailingKeyframe.keyframeTime.floatValue + interpolatedProgress:progress + startColor:self.leadingKeyframe.colorValue.CGColor + endColor:self.trailingKeyframe.colorValue.CGColor + currentColor:returnColor.CGColor]; + } + + return returnColor.CGColor; +} + +- (void)setValueDelegate:(id)delegate { + NSAssert(([delegate conformsToProtocol:@protocol(LOTColorValueDelegate)]), @"Color Interpolator set with incorrect callback type. Expected LOTColorValueDelegate"); + self.delegate = (id)delegate; +} + +- (BOOL)hasDelegateOverride { + return self.delegate != nil; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h new file mode 100644 index 0000000..fe179a3 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h @@ -0,0 +1,22 @@ +// +// LOTNumberInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/11/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTValueInterpolator.h" +#import "LOTValueDelegate.h" + +NS_ASSUME_NONNULL_BEGIN +@interface LOTNumberInterpolator : LOTValueInterpolator + +- (CGFloat)floatValueForFrame:(NSNumber *)frame; + +@property (nonatomic, weak, nullable) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m new file mode 100644 index 0000000..fb560b6 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m @@ -0,0 +1,46 @@ +// +// LOTNumberInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/11/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTNumberInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTNumberInterpolator + +- (CGFloat)floatValueForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + CGFloat returnValue; + if (progress == 0) { + returnValue = self.leadingKeyframe.floatValue; + } else if (progress == 1) { + returnValue = self.trailingKeyframe.floatValue; + } else { + returnValue = LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.floatValue, self.trailingKeyframe.floatValue); + } + if (self.hasDelegateOverride) { + return [self.delegate floatValueForFrame:frame.floatValue + startKeyframe:self.leadingKeyframe.keyframeTime.floatValue + endKeyframe:self.trailingKeyframe.keyframeTime.floatValue + interpolatedProgress:progress + startValue:self.leadingKeyframe.floatValue + endValue:self.trailingKeyframe.floatValue + currentValue:returnValue]; + } + + return returnValue; +} + +- (BOOL)hasDelegateOverride { + return self.delegate != nil; +} + +- (void)setValueDelegate:(id _Nonnull)delegate { + NSAssert(([delegate conformsToProtocol:@protocol(LOTNumberValueDelegate)]), @"Number Interpolator set with incorrect callback type. Expected LOTNumberValueDelegate"); + self.delegate = (id)delegate; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h new file mode 100644 index 0000000..0b7ccdf --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h @@ -0,0 +1,24 @@ +// +// LOTPathInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" +#import "LOTPlatformCompat.h" +#import "LOTBezierPath.h" +#import "LOTValueDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTPathInterpolator : LOTValueInterpolator + +- (LOTBezierPath *)pathForFrame:(NSNumber *)frame cacheLengths:(BOOL)cacheLengths; + +@property (nonatomic, weak, nullable) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m new file mode 100644 index 0000000..41ef5ff --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m @@ -0,0 +1,81 @@ +// +// LOTPathInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPathInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTPathInterpolator + +- (LOTBezierPath *)pathForFrame:(NSNumber *)frame cacheLengths:(BOOL)cacheLengths { + CGFloat progress = [self progressForFrame:frame]; + if (self.hasDelegateOverride) { + CGPathRef callBackPath = [self.delegate pathForFrame:frame.floatValue + startKeyframe:self.leadingKeyframe.keyframeTime.floatValue + endKeyframe:self.trailingKeyframe.keyframeTime.floatValue + interpolatedProgress:progress]; + return [LOTBezierPath pathWithCGPath:callBackPath]; + } + + LOTBezierPath *returnPath = [[LOTBezierPath alloc] init]; + returnPath.cacheLengths = cacheLengths; + LOTBezierData *leadingData = self.leadingKeyframe.pathData; + LOTBezierData *trailingData = self.trailingKeyframe.pathData; + NSInteger vertexCount = leadingData ? leadingData.count : trailingData.count; + BOOL closePath = leadingData ? leadingData.closed : trailingData.closed; + CGPoint cp1 = CGPointMake(0, 0); + CGPoint cp2, p1, cp3 = CGPointZero; + CGPoint startPoint = CGPointMake(0, 0); + CGPoint startInTangent = CGPointMake(0, 0); + for (int i = 0; i < vertexCount; i++) { + if (progress == 0) { + cp2 = [leadingData inTangentAtIndex:i]; + p1 = [leadingData vertexAtIndex:i]; + cp3 = [leadingData outTangentAtIndex:i]; + } else if (progress == 1) { + cp2 = [trailingData inTangentAtIndex:i]; + p1 = [trailingData vertexAtIndex:i]; + cp3 = [trailingData outTangentAtIndex:i]; + } else { + cp2 = LOT_PointInLine([leadingData inTangentAtIndex:i], + [trailingData inTangentAtIndex:i], + progress); + p1 = LOT_PointInLine([leadingData vertexAtIndex:i], + [trailingData vertexAtIndex:i], + progress); + cp3 = LOT_PointInLine([leadingData outTangentAtIndex:i], + [trailingData outTangentAtIndex:i], + progress); + } + if (i == 0) { + startPoint = p1; + startInTangent = cp2; + [returnPath LOT_moveToPoint:p1]; + } else { + [returnPath LOT_addCurveToPoint:p1 controlPoint1:cp1 controlPoint2:cp2]; + } + cp1 = cp3; + } + + if (closePath) { + [returnPath LOT_addCurveToPoint:startPoint controlPoint1:cp3 controlPoint2:startInTangent]; + [returnPath LOT_closePath]; + } + + return returnPath; +} + +- (void)setValueDelegate:(id)delegate { + NSAssert(([delegate conformsToProtocol:@protocol(LOTPathValueDelegate)]), @"Path Interpolator set with incorrect callback type. Expected LOTPathValueDelegate"); + self.delegate = (id)delegate; +} + +- (BOOL)hasDelegateOverride { + return self.delegate != nil; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h new file mode 100644 index 0000000..1564321 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h @@ -0,0 +1,22 @@ +// +// LOTPointInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/12/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" +#import "LOTValueDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTPointInterpolator : LOTValueInterpolator + +- (CGPoint)pointValueForFrame:(NSNumber *)frame; + +@property (nonatomic, weak, nullable) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m new file mode 100644 index 0000000..66701b4 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m @@ -0,0 +1,51 @@ +// +// LOTPointInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/12/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPointInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTPointInterpolator + +- (CGPoint)pointValueForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + CGPoint returnPoint; + if (progress == 0) { + returnPoint = self.leadingKeyframe.pointValue; + } else if (progress == 1) { + returnPoint = self.trailingKeyframe.pointValue; + } else if (!CGPointEqualToPoint(self.leadingKeyframe.spatialOutTangent, CGPointZero) || + !CGPointEqualToPoint(self.trailingKeyframe.spatialInTangent, CGPointZero)) { + // Spatial Bezier path + CGPoint outTan = LOT_PointAddedToPoint(self.leadingKeyframe.pointValue, self.leadingKeyframe.spatialOutTangent); + CGPoint inTan = LOT_PointAddedToPoint(self.trailingKeyframe.pointValue, self.trailingKeyframe.spatialInTangent); + returnPoint = LOT_PointInCubicCurve(self.leadingKeyframe.pointValue, outTan, inTan, self.trailingKeyframe.pointValue, progress); + } else { + returnPoint = LOT_PointInLine(self.leadingKeyframe.pointValue, self.trailingKeyframe.pointValue, progress); + } + if (self.hasDelegateOverride) { + return [self.delegate pointForFrame:frame.floatValue + startKeyframe:self.leadingKeyframe.keyframeTime.floatValue + endKeyframe:self.trailingKeyframe.keyframeTime.floatValue + interpolatedProgress:progress + startPoint:self.leadingKeyframe.pointValue + endPoint:self.trailingKeyframe.pointValue + currentPoint:returnPoint]; + } + return returnPoint; +} + +- (BOOL)hasDelegateOverride { + return self.delegate != nil; +} + +- (void)setValueDelegate:(id)delegate { + NSAssert(([delegate conformsToProtocol:@protocol(LOTPointValueDelegate)]), @"Point Interpolator set with incorrect callback type. Expected LOTPointValueDelegate"); + self.delegate = (id)delegate; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h new file mode 100644 index 0000000..a8b4e1f --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h @@ -0,0 +1,22 @@ +// +// LOTSizeInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" +#import "LOTValueDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTSizeInterpolator : LOTValueInterpolator + +- (CGSize)sizeValueForFrame:(NSNumber *)frame; + +@property (nonatomic, weak, nullable) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m new file mode 100644 index 0000000..4c06e64 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m @@ -0,0 +1,46 @@ +// +// LOTSizeInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPlatformCompat.h" +#import "LOTSizeInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTSizeInterpolator + +- (CGSize)sizeValueForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + CGSize returnSize; + if (progress == 0) { + returnSize = self.leadingKeyframe.sizeValue; + }else if (progress == 1) { + returnSize = self.trailingKeyframe.sizeValue; + } else { + returnSize = CGSizeMake(LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.sizeValue.width, self.trailingKeyframe.sizeValue.width), + LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.sizeValue.height, self.trailingKeyframe.sizeValue.height)); + } + if (self.hasDelegateOverride) { + return [self.delegate sizeForFrame:frame.floatValue + startKeyframe:self.leadingKeyframe.keyframeTime.floatValue + endKeyframe:self.trailingKeyframe.keyframeTime.floatValue + interpolatedProgress:progress startSize:self.leadingKeyframe.sizeValue + endSize:self.trailingKeyframe.sizeValue + currentSize:returnSize]; + } + return returnSize; +} + +- (BOOL)hasDelegateOverride { + return self.delegate != nil; +} + +- (void)setValueDelegate:(id)delegate { + NSAssert(([delegate conformsToProtocol:@protocol(LOTSizeValueDelegate)]), @"Size Interpolator set with incorrect callback type. Expected LOTSizeValueDelegate"); + self.delegate = (id)delegate; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h new file mode 100644 index 0000000..251e375 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h @@ -0,0 +1,48 @@ +// +// LOTTransformInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/18/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTNumberInterpolator.h" +#import "LOTPointInterpolator.h" +#import "LOTSizeInterpolator.h" +#import "LOTKeyframe.h" +#import "LOTLayer.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTTransformInterpolator : NSObject + ++ (instancetype)transformForLayer:(LOTLayer *)layer; + +- (instancetype)initWithPosition:(NSArray *)position + rotation:(NSArray *)rotation + anchor:(NSArray *)anchor + scale:(NSArray *)scale; + +- (instancetype)initWithPositionX:(NSArray *)positionX + positionY:(NSArray *)positionY + rotation:(NSArray *)rotation + anchor:(NSArray *)anchor + scale:(NSArray *)scale; + +@property (nonatomic, strong) LOTTransformInterpolator * inputNode; + +@property (nonatomic, readonly) LOTPointInterpolator *positionInterpolator; +@property (nonatomic, readonly) LOTPointInterpolator *anchorInterpolator; +@property (nonatomic, readonly) LOTSizeInterpolator *scaleInterpolator; +@property (nonatomic, readonly) LOTNumberInterpolator *rotationInterpolator; +@property (nonatomic, readonly) LOTNumberInterpolator *positionXInterpolator; +@property (nonatomic, readonly) LOTNumberInterpolator *positionYInterpolator; +@property (nonatomic, strong, nullable) NSString *parentKeyName; + +- (CATransform3D)transformForFrame:(NSNumber *)frame; +- (BOOL)hasUpdateForFrame:(NSNumber *)frame; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m new file mode 100644 index 0000000..50b142b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m @@ -0,0 +1,127 @@ +// +// LOTTransformInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/18/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTTransformInterpolator.h" + +// TODO BW Perf update, Cache transform + +@implementation LOTTransformInterpolator { + LOTPointInterpolator *_positionInterpolator; + LOTPointInterpolator *_anchorInterpolator; + LOTSizeInterpolator *_scaleInterpolator; + LOTNumberInterpolator *_rotationInterpolator; + LOTNumberInterpolator *_positionXInterpolator; + LOTNumberInterpolator *_positionYInterpolator; +} + ++ (instancetype)transformForLayer:(LOTLayer *)layer { + LOTTransformInterpolator *interpolator = nil; + if (layer.position) { + interpolator = [[LOTTransformInterpolator alloc] initWithPosition:layer.position.keyframes + rotation:layer.rotation.keyframes + anchor:layer.anchor.keyframes + scale:layer.scale.keyframes]; + } else { + interpolator = [[LOTTransformInterpolator alloc] initWithPositionX:layer.positionX.keyframes + positionY:layer.positionY.keyframes + rotation:layer.rotation.keyframes + anchor:layer.anchor.keyframes + scale:layer.scale.keyframes]; + } + interpolator.parentKeyName = [layer.layerName copy]; + return interpolator; +} + +- (instancetype)initWithPosition:(NSArray *)position + rotation:(NSArray *)rotation + anchor:(NSArray *)anchor + scale:(NSArray *)scale { + self = [super init]; + if (self) { + [self initializeWithPositionX:nil positionY:nil position:position rotation:rotation anchor:anchor scale:scale]; + } + return self; +} + +- (instancetype)initWithPositionX:(NSArray *)positionX + positionY:(NSArray *)positionY + rotation:(NSArray *)rotation + anchor:(NSArray *)anchor + scale:(NSArray *)scale { + self = [super init]; + if (self) { + [self initializeWithPositionX:positionX positionY:positionY position:nil rotation:rotation anchor:anchor scale:scale]; + } + return self; +} + + +- (void)initializeWithPositionX:(NSArray *)positionX + positionY:(NSArray *)positionY + position:(NSArray *)position + rotation:(NSArray *)rotation + anchor:(NSArray *)anchor + scale:(NSArray *)scale { + + if (position) { + _positionInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:position]; + } + if (positionY) { + _positionYInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:positionY]; + } + if (positionX) { + _positionXInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:positionX]; + } + _anchorInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:anchor]; + _scaleInterpolator = [[LOTSizeInterpolator alloc] initWithKeyframes:scale]; + _rotationInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:rotation]; +} + +- (BOOL)hasUpdateForFrame:(NSNumber *)frame { + BOOL inputUpdate = _inputNode ? [_inputNode hasUpdateForFrame:frame] : NO; + if (inputUpdate) { + return inputUpdate; + } + if (_positionInterpolator) { + return ([_positionInterpolator hasUpdateForFrame:frame] || + [_anchorInterpolator hasUpdateForFrame:frame] || + [_scaleInterpolator hasUpdateForFrame:frame] || + [_rotationInterpolator hasUpdateForFrame:frame]); + } + return ([_positionXInterpolator hasUpdateForFrame:frame] || + [_positionYInterpolator hasUpdateForFrame:frame] || + [_anchorInterpolator hasUpdateForFrame:frame] || + [_scaleInterpolator hasUpdateForFrame:frame] || + [_rotationInterpolator hasUpdateForFrame:frame]); +} + +- (CATransform3D)transformForFrame:(NSNumber *)frame { + CATransform3D baseXform = CATransform3DIdentity; + if (_inputNode) { + baseXform = [_inputNode transformForFrame:frame]; + } + CGPoint position = CGPointZero; + if (_positionInterpolator) { + position = [_positionInterpolator pointValueForFrame:frame]; + } + if (_positionXInterpolator && + _positionYInterpolator) { + position.x = [_positionXInterpolator floatValueForFrame:frame]; + position.y = [_positionYInterpolator floatValueForFrame:frame]; + } + CGPoint anchor = [_anchorInterpolator pointValueForFrame:frame]; + CGSize scale = [_scaleInterpolator sizeValueForFrame:frame]; + CGFloat rotation = [_rotationInterpolator floatValueForFrame:frame]; + CATransform3D translateXform = CATransform3DTranslate(baseXform, position.x, position.y, 0); + CATransform3D rotateXform = CATransform3DRotate(translateXform, rotation, 0, 0, 1); + CATransform3D scaleXform = CATransform3DScale(rotateXform, scale.width, scale.height, 1); + CATransform3D anchorXform = CATransform3DTranslate(scaleXform, -1 * anchor.x, -1 * anchor.y, 0); + return anchorXform; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h new file mode 100644 index 0000000..775dcd8 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h @@ -0,0 +1,30 @@ +// +// LOTValueInterpolator.h +// Pods +// +// Created by brandon_withrow on 7/10/17. +// +// + +#import +#import "LOTKeyframe.h" +#import "LOTValueDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface LOTValueInterpolator : NSObject + +- (instancetype)initWithKeyframes:(NSArray *)keyframes; + +@property (nonatomic, weak, nullable) LOTKeyframe *leadingKeyframe; +@property (nonatomic, weak, nullable) LOTKeyframe *trailingKeyframe; +@property (nonatomic, readonly) BOOL hasDelegateOverride; + +- (void)setValueDelegate:(id _Nonnull)delegate; + +- (BOOL)hasUpdateForFrame:(NSNumber *)frame; +- (CGFloat)progressForFrame:(NSNumber *)frame; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m new file mode 100644 index 0000000..80173ef --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m @@ -0,0 +1,167 @@ +// +// LOTValueInterpolator.m +// Pods +// +// Created by brandon_withrow on 7/10/17. +// +// + +#import "LOTValueInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@interface LOTValueInterpolator () + +@property (nonatomic, strong) NSArray *keyframes; + +@end + +@implementation LOTValueInterpolator + +- (instancetype)initWithKeyframes:(NSArray *)keyframes { + self = [super init]; + if (self) { + _keyframes = keyframes; + } + return self; +} + +- (BOOL)hasUpdateForFrame:(NSNumber *)frame { + if (self.hasDelegateOverride) { + return YES; + } + /* + Cases we dont update keyframe + if time is in span and leading keyframe is hold + if trailing keyframe is nil and time is after leading + if leading keyframe is nil and time is before trailing + */ + if (self.leadingKeyframe && + self.trailingKeyframe == nil && + self.leadingKeyframe.keyframeTime.floatValue < frame.floatValue) { + // Frame is after bounds of keyframes. Clip + return NO; + } + if (self.trailingKeyframe && + self.leadingKeyframe == nil && + self.trailingKeyframe.keyframeTime.floatValue > frame.floatValue) { + // Frame is before keyframes bounds. Clip. + return NO; + } + if (self.leadingKeyframe && self.trailingKeyframe && + self.leadingKeyframe.isHold && + self.leadingKeyframe.keyframeTime.floatValue < frame.floatValue && + self.trailingKeyframe.keyframeTime.floatValue > frame.floatValue) { + // Frame is in span and current span is a hold keyframe + return NO; + } + + return YES; +} + +- (void)updateKeyframeSpanForFrame:(NSNumber *)frame { + if (self.leadingKeyframe == nil && + self.trailingKeyframe == nil) { + // Set Initial Keyframes + LOTKeyframe *first = _keyframes.firstObject; + if (first.keyframeTime.floatValue > 0) { + self.trailingKeyframe = first; + } else { + self.leadingKeyframe = first; + if (_keyframes.count > 1) { + self.trailingKeyframe = _keyframes[1]; + } + } + } + if (self.trailingKeyframe && frame.floatValue >= self.trailingKeyframe.keyframeTime.floatValue) { + // Frame is after current span, can move forward + NSInteger index = [_keyframes indexOfObject:self.trailingKeyframe]; + BOOL keyframeFound = NO; + + LOTKeyframe *testLeading = self.trailingKeyframe; + LOTKeyframe *testTrailing = nil; + + while (keyframeFound == NO) { + index ++; + if (index < _keyframes.count) { + testTrailing = _keyframes[index]; + if (frame.floatValue < testTrailing.keyframeTime.floatValue) { + // This is the span. + keyframeFound = YES; + } else { + testLeading = testTrailing; + } + } else { + // Leading is Last object + testTrailing = nil; + keyframeFound = YES; + } + } + self.leadingKeyframe = testLeading; + self.trailingKeyframe = testTrailing; + } else if (self.leadingKeyframe && frame.floatValue < self.leadingKeyframe.keyframeTime.floatValue) { + // Frame is before current span, can move back a span + NSInteger index = [_keyframes indexOfObject:self.leadingKeyframe]; + BOOL keyframeFound = NO; + + LOTKeyframe *testLeading = nil; + LOTKeyframe *testTrailing = self.leadingKeyframe; + + while (keyframeFound == NO) { + index --; + if (index >= 0) { + testLeading = _keyframes[index]; + if (frame.floatValue >= testLeading.keyframeTime.floatValue) { + // This is the span. + keyframeFound = YES; + } else { + testTrailing = testLeading; + } + } else { + // Trailing is first object + testLeading = nil; + keyframeFound = YES; + } + } + self.leadingKeyframe = testLeading; + self.trailingKeyframe = testTrailing; + } +} + +- (CGFloat)progressForFrame:(NSNumber *)frame { + [self updateKeyframeSpanForFrame:frame]; + // At this point frame definitely exists between leading and trailing keyframes + if (self.leadingKeyframe.keyframeTime == frame) { + // Frame is leading keyframe + return 0; + } + if (self.trailingKeyframe == nil) { + // Frame is after end of keyframe timeline + return 0; + } + if (self.leadingKeyframe.isHold) { + // Hold Keyframe + return 0; + } + if (self.leadingKeyframe == nil) { + // Frame is before start of keyframe timeline + return 1; + } + + CGFloat progression = LOT_RemapValue(frame.floatValue, self.leadingKeyframe.keyframeTime.floatValue, self.trailingKeyframe.keyframeTime.floatValue, 0, 1); + + if ((self.leadingKeyframe.outTangent.x != self.leadingKeyframe.outTangent.y || + self.trailingKeyframe.inTangent.x != self.trailingKeyframe.inTangent.y) && + (!LOT_CGPointIsZero(self.leadingKeyframe.outTangent) && + !LOT_CGPointIsZero(self.trailingKeyframe.inTangent))) { + // Bezier Time Curve + progression = LOT_CubicBezierInterpolate(CGPointMake(0, 0), self.leadingKeyframe.outTangent, self.trailingKeyframe.inTangent, CGPointMake(1, 1), progression); + } + + return progression; +} + +- (void)setValueDelegate:(id _Nonnull)delegate { + NSAssert((NO), @"Interpolator does not support value callbacks"); +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h new file mode 100644 index 0000000..a0abdda --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h @@ -0,0 +1,63 @@ +// +// LOTAnimatorNode.h +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import +#import "LOTPlatformCompat.h" +#import "LOTBezierPath.h" +#import "LOTKeypath.h" +#import "LOTValueDelegate.h" + +extern NSInteger indentation_level; +@interface LOTAnimatorNode : NSObject + +/// Initializes the node with and optional input node and keyname. +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + keyName:(NSString *_Nullable)keyname; + +/// A dictionary of the value interpolators this node controls +@property (nonatomic, readonly, strong) NSDictionary * _Nullable valueInterpolators; + +/// The keyname of the node. Used for dynamically setting keyframe data. +@property (nonatomic, readonly, strong) NSString * _Nullable keyname; + +/// The current time in frames +@property (nonatomic, readonly, strong) NSNumber * _Nullable currentFrame; +/// The upstream animator node +@property (nonatomic, readonly, strong) LOTAnimatorNode * _Nullable inputNode; + +/// This nodes path in local object space +@property (nonatomic, strong) LOTBezierPath * _Nonnull localPath; +/// The sum of all paths in the tree including this node +@property (nonatomic, strong) LOTBezierPath * _Nonnull outputPath; + +/// Returns true if this node needs to update its contents for the given frame. To be overwritten by subclasses. +- (BOOL)needsUpdateForFrame:(NSNumber *_Nonnull)frame; + +/// Sets the current frame and performs any updates. Returns true if any updates were performed, locally or upstream. +- (BOOL)updateWithFrame:(NSNumber *_Nonnull)frame; +- (BOOL)updateWithFrame:(NSNumber *_Nonnull)frame + withModifierBlock:(void (^_Nullable)(LOTAnimatorNode * _Nonnull inputNode))modifier + forceLocalUpdate:(BOOL)forceUpdate; + +- (void)forceSetCurrentFrame:(NSNumber *_Nonnull)frame; + +@property (nonatomic, assign) BOOL pathShouldCacheLengths; +/// Update the local content for the frame. +- (void)performLocalUpdate; + +/// Rebuild all outputs for the node. This is called after upstream updates have been performed. +- (void)rebuildOutputs; + +- (void)logString:(NSString *_Nonnull)string; + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath; + +- (void)setValueDelegate:(id _Nonnull)delegate + forKeypath:(LOTKeypath * _Nonnull)keypath; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m new file mode 100644 index 0000000..de54340 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m @@ -0,0 +1,131 @@ +// +// LOTAnimatorNode.m +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTAnimatorNode.h" +#import "LOTHelpers.h" +#import "LOTValueInterpolator.h" + +NSInteger indentation_level = 0; + +@implementation LOTAnimatorNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + keyName:(NSString *_Nullable)keyname { + self = [super init]; + if (self) { + _keyname = keyname; + _inputNode = inputNode; + } + return self; +} + +/// To be overwritten by subclass. Defaults to YES +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return YES; +} + +/// The node checks if local update or if upstream update required. If upstream update outputs are rebuilt. If local update local update is performed. Returns no if no action +- (BOOL)updateWithFrame:(NSNumber *_Nonnull)frame { + return [self updateWithFrame:frame withModifierBlock:NULL forceLocalUpdate:NO]; +} + +- (BOOL)updateWithFrame:(NSNumber *_Nonnull)frame + withModifierBlock:(void (^_Nullable)(LOTAnimatorNode * _Nonnull inputNode))modifier + forceLocalUpdate:(BOOL)forceUpdate { + if ([_currentFrame isEqual:frame] && !forceUpdate) { + return NO; + } + if (ENABLE_DEBUG_LOGGING) [self logString:[NSString stringWithFormat:@"%lu %@ Checking for update", (unsigned long)self.hash, self.keyname]]; + BOOL localUpdate = [self needsUpdateForFrame:frame] || forceUpdate; + if (localUpdate && ENABLE_DEBUG_LOGGING) { + [self logString:[NSString stringWithFormat:@"%lu %@ Performing update", (unsigned long)self.hash, self.keyname]]; + } + BOOL inputUpdated = [_inputNode updateWithFrame:frame + withModifierBlock:modifier + forceLocalUpdate:forceUpdate]; + _currentFrame = frame; + if (localUpdate) { + [self performLocalUpdate]; + if (modifier) { + modifier(self); + } + } + + if (inputUpdated || localUpdate) { + [self rebuildOutputs]; + } + return (inputUpdated || localUpdate); +} + +- (void)forceSetCurrentFrame:(NSNumber *_Nonnull)frame { + _currentFrame = frame; +} + +- (void)logString:(NSString *)string { + NSMutableString *logString = [NSMutableString string]; + [logString appendString:@"|"]; + for (int i = 0; i < indentation_level; i ++) { + [logString appendString:@" "]; + } + [logString appendString:string]; + NSLog(@"%@ %@", NSStringFromClass([self class]), logString); +} + +// TOBO BW Perf, make updates perform only when necessary. Currently everything in a node is updated +/// Performs any local content update and updates self.localPath +- (void)performLocalUpdate { + self.localPath = [[LOTBezierPath alloc] init]; +} + +/// Rebuilds outputs by adding localPath to inputNodes output path. +- (void)rebuildOutputs { + if (self.inputNode) { + self.outputPath = [self.inputNode.outputPath copy]; + [self.outputPath LOT_appendPath:self.localPath]; + } else { + self.outputPath = self.localPath; + } +} + +- (void)setPathShouldCacheLengths:(BOOL)pathShouldCacheLengths { + _pathShouldCacheLengths = pathShouldCacheLengths; + self.inputNode.pathShouldCacheLengths = pathShouldCacheLengths; +} + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + [self.inputNode searchNodesForKeypath:keypath]; + if ([keypath pushKey:self.keyname]) { + // Matches self. Check interpolators + if (keypath.endOfKeypath) { + // Add self + [keypath addSearchResultForCurrentPath:self]; + } else if (self.valueInterpolators[keypath.currentKey] != nil) { + [keypath pushKey:keypath.currentKey]; + // We have a match! + [keypath addSearchResultForCurrentPath:self]; + [keypath popKey]; + } + [keypath popKey]; + } +} + +- (void)setValueDelegate:(id _Nonnull)delegate + forKeypath:(LOTKeypath * _Nonnull)keypath { + if ([keypath pushKey:self.keyname]) { + // Matches self. Check interpolators + LOTValueInterpolator *interpolator = self.valueInterpolators[keypath.currentKey]; + if (interpolator) { + // We have a match! + [interpolator setValueDelegate:delegate]; + } + [keypath popKey]; + } + [self.inputNode setValueDelegate:delegate forKeypath:keypath]; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTRenderNode.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTRenderNode.h new file mode 100644 index 0000000..c1af45e --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTRenderNode.h @@ -0,0 +1,17 @@ +// +// LOTRenderNode.h +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTAnimatorNode.h" + +@interface LOTRenderNode : LOTAnimatorNode + +@property (nonatomic, readonly, strong) CAShapeLayer * _Nonnull outputLayer; + +- (NSDictionary * _Nonnull)actionsForRenderLayer; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTRenderNode.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTRenderNode.m new file mode 100644 index 0000000..7e50a85 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/LOTRenderNode.m @@ -0,0 +1,47 @@ +// +// LOTRenderNode.m +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTRenderNode.h" + +@implementation LOTRenderNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + keyName:(NSString * _Nullable)keyname { + self = [super initWithInputNode:inputNode keyName:keyname]; + if (self) { + _outputLayer = [CAShapeLayer new]; + _outputLayer.actions = [self actionsForRenderLayer]; + } + return self; +} + +/// Layer Properties that need to disable implicit animations +- (NSDictionary * _Nonnull)actionsForRenderLayer { + return @{@"path": [NSNull null]}; +} + +/// Local interpolators have changed. Update layer specific properties. +- (void)performLocalUpdate { + +} + +/// The path for rendering has changed. Do any rendering required. +- (void)rebuildOutputs { + +} + +- (LOTBezierPath *)localPath { + return self.inputNode.localPath; +} + +/// Forwards its input node's output path forwards downstream +- (LOTBezierPath *)outputPath { + return self.inputNode.outputPath; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h new file mode 100644 index 0000000..f4260cb --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h @@ -0,0 +1,17 @@ +// +// LOTTrimPathNode.h +// Lottie +// +// Created by brandon_withrow on 7/21/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTAnimatorNode.h" +#import "LOTShapeTrimPath.h" + +@interface LOTTrimPathNode : LOTAnimatorNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + trimPath:(LOTShapeTrimPath *_Nonnull)trimPath; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m new file mode 100644 index 0000000..503b4db --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m @@ -0,0 +1,96 @@ +// +// LOTTrimPathNode.m +// Lottie +// +// Created by brandon_withrow on 7/21/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTTrimPathNode.h" +#import "LOTNumberInterpolator.h" +#import "LOTPathAnimator.h" +#import "LOTCircleAnimator.h" +#import "LOTRoundedRectAnimator.h" +#import "LOTRenderGroup.h" + +@implementation LOTTrimPathNode { + LOTNumberInterpolator *_startInterpolator; + LOTNumberInterpolator *_endInterpolator; + LOTNumberInterpolator *_offsetInterpolator; + + CGFloat _startT; + CGFloat _endT; + CGFloat _offsetT; +} + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + trimPath:(LOTShapeTrimPath *_Nonnull)trimPath { + self = [super initWithInputNode:inputNode keyName:trimPath.keyname]; + if (self) { + inputNode.pathShouldCacheLengths = YES; + _startInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:trimPath.start.keyframes]; + _endInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:trimPath.end.keyframes]; + _offsetInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:trimPath.offset.keyframes]; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Start" : _startInterpolator, + @"End" : _endInterpolator, + @"Offset" : _offsetInterpolator}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return ([_startInterpolator hasUpdateForFrame:frame] || + [_endInterpolator hasUpdateForFrame:frame] || + [_offsetInterpolator hasUpdateForFrame:frame]); +} + +- (BOOL)updateWithFrame:(NSNumber *)frame + withModifierBlock:(void (^ _Nullable)(LOTAnimatorNode * _Nonnull))modifier + forceLocalUpdate:(BOOL)forceUpdate { + BOOL localUpdate = [self needsUpdateForFrame:frame]; + [self forceSetCurrentFrame:frame]; + if (localUpdate) { + [self performLocalUpdate]; + } + if (self.inputNode == nil) { + return localUpdate; + } + + BOOL inputUpdated = [self.inputNode updateWithFrame:frame withModifierBlock:^(LOTAnimatorNode * _Nonnull inputNode) { + if ([inputNode isKindOfClass:[LOTPathAnimator class]] || + [inputNode isKindOfClass:[LOTCircleAnimator class]] || + [inputNode isKindOfClass:[LOTRoundedRectAnimator class]]) { + [inputNode.localPath trimPathFromT:self->_startT toT:self->_endT offset:self->_offsetT]; + } + if (modifier) { + modifier(inputNode); + } + + } forceLocalUpdate:(localUpdate || forceUpdate)]; + + return inputUpdated; +} + +- (void)performLocalUpdate { + _startT = [_startInterpolator floatValueForFrame:self.currentFrame] / 100; + _endT = [_endInterpolator floatValueForFrame:self.currentFrame] / 100; + _offsetT = [_offsetInterpolator floatValueForFrame:self.currentFrame] / 360; +} + +- (void)rebuildOutputs { + // Skip this step. +} + +- (LOTBezierPath *)localPath { + return self.inputNode.localPath; +} + +/// Forwards its input node's output path forwards downstream +- (LOTBezierPath *)outputPath { + return self.inputNode.outputPath; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h new file mode 100644 index 0000000..7cbfecb --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h @@ -0,0 +1,17 @@ +// +// LOTFillRenderer.h +// Lottie +// +// Created by brandon_withrow on 6/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRenderNode.h" +#import "LOTShapeFill.h" + +@interface LOTFillRenderer : LOTRenderNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeFill:(LOTShapeFill *_Nonnull)fill; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m new file mode 100644 index 0000000..31aeddf --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m @@ -0,0 +1,66 @@ +// +// LOTFillRenderer.m +// Lottie +// +// Created by brandon_withrow on 6/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTFillRenderer.h" +#import "LOTColorInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "LOTHelpers.h" + +@implementation LOTFillRenderer { + LOTColorInterpolator *colorInterpolator_; + LOTNumberInterpolator *opacityInterpolator_; + BOOL _evenOddFillRule; + CALayer *centerPoint_DEBUG; +} + +- (instancetype)initWithInputNode:(LOTAnimatorNode *)inputNode + shapeFill:(LOTShapeFill *)fill { + self = [super initWithInputNode:inputNode keyName:fill.keyname]; + if (self) { + colorInterpolator_ = [[LOTColorInterpolator alloc] initWithKeyframes:fill.color.keyframes]; + opacityInterpolator_ = [[LOTNumberInterpolator alloc] initWithKeyframes:fill.opacity.keyframes]; + centerPoint_DEBUG = [CALayer layer]; + centerPoint_DEBUG.bounds = CGRectMake(0, 0, 20, 20); + if (ENABLE_DEBUG_SHAPES) { + [self.outputLayer addSublayer:centerPoint_DEBUG]; + } + _evenOddFillRule = fill.evenOddFillRule; + + self.outputLayer.fillRule = _evenOddFillRule ? @"even-odd" : @"non-zero"; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Color" : colorInterpolator_, + @"Opacity" : opacityInterpolator_}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return [colorInterpolator_ hasUpdateForFrame:frame] || [opacityInterpolator_ hasUpdateForFrame:frame]; +} + +- (void)performLocalUpdate { + centerPoint_DEBUG.backgroundColor = [colorInterpolator_ colorForFrame:self.currentFrame]; + centerPoint_DEBUG.borderColor = [UIColor lightGrayColor].CGColor; + centerPoint_DEBUG.borderWidth = 2.f; + self.outputLayer.fillColor = [colorInterpolator_ colorForFrame:self.currentFrame]; + self.outputLayer.opacity = [opacityInterpolator_ floatValueForFrame:self.currentFrame]; +} + +- (void)rebuildOutputs { + self.outputLayer.path = self.inputNode.outputPath.CGPath; +} + +- (NSDictionary *)actionsForRenderLayer { + return @{@"backgroundColor": [NSNull null], + @"fillColor": [NSNull null], + @"opacity" : [NSNull null]}; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h new file mode 100644 index 0000000..3ff1496 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h @@ -0,0 +1,17 @@ +// +// LOTGradientFillRender.h +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRenderNode.h" +#import "LOTShapeGradientFill.h" + +@interface LOTGradientFillRender : LOTRenderNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeGradientFill:(LOTShapeGradientFill *_Nonnull)fill; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m new file mode 100644 index 0000000..86909cc --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m @@ -0,0 +1,156 @@ +// +// LOTGradientFillRender.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTGradientFillRender.h" +#import "LOTArrayInterpolator.h" +#import "LOTPointInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "CGGeometry+LOTAdditions.h" +#import "LOTHelpers.h" +#import "LOTRadialGradientLayer.h" + +@implementation LOTGradientFillRender { + BOOL _evenOddFillRule; + CALayer *centerPoint_DEBUG; + + CAShapeLayer *_maskShape; + LOTRadialGradientLayer *_gradientOpacityLayer; + LOTRadialGradientLayer *_gradientLayer; + NSInteger _numberOfPositions; + + CGPoint _startPoint; + CGPoint _endPoint; + + LOTArrayInterpolator *_gradientInterpolator; + LOTPointInterpolator *_startPointInterpolator; + LOTPointInterpolator *_endPointInterpolator; + LOTNumberInterpolator *_opacityInterpolator; +} + +- (instancetype)initWithInputNode:(LOTAnimatorNode *)inputNode + shapeGradientFill:(LOTShapeGradientFill *)fill { + self = [super initWithInputNode:inputNode keyName:fill.keyname]; + if (self) { + _gradientInterpolator = [[LOTArrayInterpolator alloc] initWithKeyframes:fill.gradient.keyframes]; + _startPointInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:fill.startPoint.keyframes]; + _endPointInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:fill.endPoint.keyframes]; + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:fill.opacity.keyframes]; + _numberOfPositions = fill.numberOfColors.integerValue; + + _evenOddFillRule = fill.evenOddFillRule; + CALayer *wrapperLayer = [CALayer new]; + _maskShape = [CAShapeLayer new]; + _maskShape.fillRule = _evenOddFillRule ? @"even-odd" : @"non-zero"; + _maskShape.fillColor = [UIColor whiteColor].CGColor; + _maskShape.actions = @{@"path": [NSNull null]}; + + _gradientOpacityLayer = [LOTRadialGradientLayer new]; + _gradientOpacityLayer.isRadial = (fill.type == LOTGradientTypeRadial); + _gradientOpacityLayer.actions = @{@"startPoint" : [NSNull null], + @"endPoint" : [NSNull null], + @"opacity" : [NSNull null], + @"locations" : [NSNull null], + @"colors" : [NSNull null], + @"bounds" : [NSNull null], + @"anchorPoint" : [NSNull null], + @"isRadial" : [NSNull null]}; + _gradientOpacityLayer.mask = _maskShape; + [wrapperLayer addSublayer:_gradientOpacityLayer]; + + _gradientLayer = [LOTRadialGradientLayer new]; + _gradientLayer.isRadial = (fill.type == LOTGradientTypeRadial); + _gradientLayer.mask = wrapperLayer; + _gradientLayer.actions = [_gradientOpacityLayer.actions copy]; + [self.outputLayer addSublayer:_gradientLayer]; + + centerPoint_DEBUG = [CALayer layer]; + centerPoint_DEBUG.bounds = CGRectMake(0, 0, 20, 20); + if (ENABLE_DEBUG_SHAPES) { + [self.outputLayer addSublayer:centerPoint_DEBUG]; + } + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Start Point" : _startPointInterpolator, + @"End Point" : _endPointInterpolator, + @"Opacity" : _opacityInterpolator}; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return ([_gradientInterpolator hasUpdateForFrame:frame] || + [_startPointInterpolator hasUpdateForFrame:frame] || + [_endPointInterpolator hasUpdateForFrame:frame] || + [_opacityInterpolator hasUpdateForFrame:frame]); +} + +- (void)performLocalUpdate { + centerPoint_DEBUG.backgroundColor = [UIColor magentaColor].CGColor; + centerPoint_DEBUG.borderColor = [UIColor lightGrayColor].CGColor; + centerPoint_DEBUG.borderWidth = 2.f; + _startPoint = [_startPointInterpolator pointValueForFrame:self.currentFrame]; + _endPoint = [_endPointInterpolator pointValueForFrame:self.currentFrame]; + self.outputLayer.opacity = [_opacityInterpolator floatValueForFrame:self.currentFrame]; + NSArray *numberArray = [_gradientInterpolator numberArrayForFrame:self.currentFrame]; + NSMutableArray *colorArray = [NSMutableArray array]; + NSMutableArray *locationsArray = [NSMutableArray array]; + + NSMutableArray *opacityArray = [NSMutableArray array]; + NSMutableArray *opacitylocationsArray = [NSMutableArray array]; + for (int i = 0; i < _numberOfPositions; i++) { + int ix = i * 4; + NSNumber *location = numberArray[ix]; + NSNumber *r = numberArray[(ix + 1)]; + NSNumber *g = numberArray[(ix + 2)]; + NSNumber *b = numberArray[(ix + 3)]; + [locationsArray addObject:location]; + UIColor *color = [UIColor colorWithRed:r.floatValue green:g.floatValue blue:b.floatValue alpha:1]; + [colorArray addObject:(id)(color.CGColor)]; + } + for (NSInteger i = (_numberOfPositions * 4); i < numberArray.count; i = i + 2) { + NSNumber *opacityLocation = numberArray[i]; + [opacitylocationsArray addObject:opacityLocation]; + NSNumber *opacity = numberArray[i + 1]; + UIColor *opacityColor = [UIColor colorWithWhite:1 alpha:opacity.floatValue]; + [opacityArray addObject:(id)(opacityColor.CGColor)]; + } + if (opacityArray.count == 0) { + _gradientOpacityLayer.backgroundColor = [UIColor whiteColor].CGColor; + } else { + _gradientOpacityLayer.startPoint = _startPoint; + _gradientOpacityLayer.endPoint = _endPoint; + _gradientOpacityLayer.locations = opacitylocationsArray; + _gradientOpacityLayer.colors = opacityArray; + } + _gradientLayer.startPoint = _startPoint; + _gradientLayer.endPoint = _endPoint; + _gradientLayer.locations = locationsArray; + _gradientLayer.colors = colorArray; +} + +- (void)rebuildOutputs { + CGRect frame = [self.inputNode.outputPath bounds]; + CGPoint modifiedAnchor = CGPointMake(-frame.origin.x / frame.size.width, + -frame.origin.y / frame.size.height); + _maskShape.path = self.inputNode.outputPath.CGPath; + _gradientOpacityLayer.bounds = frame; + _gradientOpacityLayer.anchorPoint = modifiedAnchor; + + _gradientLayer.bounds = frame; + _gradientLayer.anchorPoint = modifiedAnchor; + +} + +- (NSDictionary *)actionsForRenderLayer { + return @{@"backgroundColor": [NSNull null], + @"fillColor": [NSNull null], + @"opacity" : [NSNull null]}; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h new file mode 100644 index 0000000..8cc9b89 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h @@ -0,0 +1,21 @@ +// +// LOTRenderGroup.h +// Lottie +// +// Created by brandon_withrow on 6/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRenderNode.h" + +@interface LOTRenderGroup : LOTRenderNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode * _Nullable)inputNode + contents:(NSArray * _Nonnull)contents + keyname:(NSString * _Nullable)keyname; + +@property (nonatomic, strong, readonly) CALayer * _Nonnull containerLayer; + +@end + + diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m new file mode 100644 index 0000000..2fc078b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m @@ -0,0 +1,237 @@ +// +// LOTRenderGroup.m +// Lottie +// +// Created by brandon_withrow on 6/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRenderGroup.h" +#import "LOTModels.h" +#import "LOTPathAnimator.h" +#import "LOTFillRenderer.h" +#import "LOTStrokeRenderer.h" +#import "LOTNumberInterpolator.h" +#import "LOTTransformInterpolator.h" +#import "LOTCircleAnimator.h" +#import "LOTRoundedRectAnimator.h" +#import "LOTTrimPathNode.h" +#import "LOTShapeStar.h" +#import "LOTPolygonAnimator.h" +#import "LOTPolystarAnimator.h" +#import "LOTShapeGradientFill.h" +#import "LOTGradientFillRender.h" +#import "LOTRepeaterRenderer.h" +#import "LOTShapeRepeater.h" + +@implementation LOTRenderGroup { + LOTAnimatorNode *_rootNode; + LOTBezierPath *_outputPath; + LOTBezierPath *_localPath; + BOOL _rootNodeHasUpdate; + LOTNumberInterpolator *_opacityInterpolator; + LOTTransformInterpolator *_transformInterpolator; +} + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode * _Nullable)inputNode + contents:(NSArray * _Nonnull)contents + keyname:(NSString * _Nullable)keyname { + self = [super initWithInputNode:inputNode keyName:keyname]; + if (self) { + _containerLayer = [CALayer layer]; + _containerLayer.actions = @{@"transform": [NSNull null], + @"opacity": [NSNull null]}; + [self buildContents:contents]; + } + return self; +} + +- (NSDictionary *)valueInterpolators { + if (_opacityInterpolator && _transformInterpolator) { + return @{@"Opacity" : _opacityInterpolator, + @"Position" : _transformInterpolator.positionInterpolator, + @"Scale" : _transformInterpolator.scaleInterpolator, + @"Rotation" : _transformInterpolator.scaleInterpolator, + @"Anchor Point" : _transformInterpolator.anchorInterpolator, + // Deprecated + @"Transform.Opacity" : _opacityInterpolator, + @"Transform.Position" : _transformInterpolator.positionInterpolator, + @"Transform.Scale" : _transformInterpolator.scaleInterpolator, + @"Transform.Rotation" : _transformInterpolator.scaleInterpolator, + @"Transform.Anchor Point" : _transformInterpolator.anchorInterpolator + }; + } + return nil; +} + +- (void)buildContents:(NSArray *)contents { + LOTAnimatorNode *previousNode = nil; + LOTShapeTransform *transform; + for (id item in contents) { + if ([item isKindOfClass:[LOTShapeFill class]]) { + LOTFillRenderer *fillRenderer = [[LOTFillRenderer alloc] initWithInputNode:previousNode + shapeFill:(LOTShapeFill *)item]; + [self.containerLayer insertSublayer:fillRenderer.outputLayer atIndex:0]; + previousNode = fillRenderer; + } else if ([item isKindOfClass:[LOTShapeStroke class]]) { + LOTStrokeRenderer *strokRenderer = [[LOTStrokeRenderer alloc] initWithInputNode:previousNode + shapeStroke:(LOTShapeStroke *)item]; + [self.containerLayer insertSublayer:strokRenderer.outputLayer atIndex:0]; + previousNode = strokRenderer; + } else if ([item isKindOfClass:[LOTShapePath class]]) { + LOTPathAnimator *pathAnimator = [[LOTPathAnimator alloc] initWithInputNode:previousNode + shapePath:(LOTShapePath *)item]; + previousNode = pathAnimator; + } else if ([item isKindOfClass:[LOTShapeRectangle class]]) { + LOTRoundedRectAnimator *rectAnimator = [[LOTRoundedRectAnimator alloc] initWithInputNode:previousNode + shapeRectangle:(LOTShapeRectangle *)item]; + previousNode = rectAnimator; + } else if ([item isKindOfClass:[LOTShapeCircle class]]) { + LOTCircleAnimator *circleAnimator = [[LOTCircleAnimator alloc] initWithInputNode:previousNode + shapeCircle:(LOTShapeCircle *)item]; + previousNode = circleAnimator; + } else if ([item isKindOfClass:[LOTShapeGroup class]]) { + LOTShapeGroup *shapeGroup = (LOTShapeGroup *)item; + LOTRenderGroup *renderGroup = [[LOTRenderGroup alloc] initWithInputNode:previousNode contents:shapeGroup.items keyname:shapeGroup.keyname]; + [self.containerLayer insertSublayer:renderGroup.containerLayer atIndex:0]; + previousNode = renderGroup; + } else if ([item isKindOfClass:[LOTShapeTransform class]]) { + transform = (LOTShapeTransform *)item; + } else if ([item isKindOfClass:[LOTShapeTrimPath class]]) { + LOTTrimPathNode *trim = [[LOTTrimPathNode alloc] initWithInputNode:previousNode trimPath:(LOTShapeTrimPath *)item]; + previousNode = trim; + } else if ([item isKindOfClass:[LOTShapeStar class]]) { + LOTShapeStar *star = (LOTShapeStar *)item; + if (star.type == LOTPolystarShapeStar) { + LOTPolystarAnimator *starAnimator = [[LOTPolystarAnimator alloc] initWithInputNode:previousNode shapeStar:star]; + previousNode = starAnimator; + } + if (star.type == LOTPolystarShapePolygon) { + LOTPolygonAnimator *polygonAnimator = [[LOTPolygonAnimator alloc] initWithInputNode:previousNode shapePolygon:star]; + previousNode = polygonAnimator; + } + } else if ([item isKindOfClass:[LOTShapeGradientFill class]]) { + LOTGradientFillRender *gradientFill = [[LOTGradientFillRender alloc] initWithInputNode:previousNode shapeGradientFill:(LOTShapeGradientFill *)item]; + previousNode = gradientFill; + [self.containerLayer insertSublayer:gradientFill.outputLayer atIndex:0]; + } else if ([item isKindOfClass:[LOTShapeRepeater class]]) { + LOTRepeaterRenderer *repeater = [[LOTRepeaterRenderer alloc] initWithInputNode:previousNode shapeRepeater:(LOTShapeRepeater *)item]; + previousNode = repeater; + [self.containerLayer insertSublayer:repeater.outputLayer atIndex:0]; + } + } + if (transform) { + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:transform.opacity.keyframes]; + _transformInterpolator = [[LOTTransformInterpolator alloc] initWithPosition:transform.position.keyframes + rotation:transform.rotation.keyframes + anchor:transform.anchor.keyframes + scale:transform.scale.keyframes]; + } + _rootNode = previousNode; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return ([_opacityInterpolator hasUpdateForFrame:frame] || + [_transformInterpolator hasUpdateForFrame:frame] || + _rootNodeHasUpdate); + +} + +- (BOOL)updateWithFrame:(NSNumber *)frame withModifierBlock:(void (^ _Nullable)(LOTAnimatorNode * _Nonnull))modifier forceLocalUpdate:(BOOL)forceUpdate { + indentation_level = indentation_level + 1; + _rootNodeHasUpdate = [_rootNode updateWithFrame:frame withModifierBlock:modifier forceLocalUpdate:forceUpdate]; + indentation_level = indentation_level - 1; + BOOL update = [super updateWithFrame:frame withModifierBlock:modifier forceLocalUpdate:forceUpdate]; + return update; +} + +- (void)performLocalUpdate { + if (_opacityInterpolator) { + self.containerLayer.opacity = [_opacityInterpolator floatValueForFrame:self.currentFrame]; + } + if (_transformInterpolator) { + CATransform3D xform = [_transformInterpolator transformForFrame:self.currentFrame]; + self.containerLayer.transform = xform; + + CGAffineTransform appliedXform = CATransform3DGetAffineTransform(xform); + _localPath = [_rootNode.outputPath copy]; + [_localPath LOT_applyTransform:appliedXform]; + } else { + _localPath = [_rootNode.outputPath copy]; + } +} + +- (void)rebuildOutputs { + if (self.inputNode) { + _outputPath = [self.inputNode.outputPath copy]; + [_outputPath LOT_appendPath:self.localPath]; + } else { + _outputPath = self.localPath; + } +} + +- (void)setPathShouldCacheLengths:(BOOL)pathShouldCacheLengths { + [super setPathShouldCacheLengths:pathShouldCacheLengths]; + _rootNode.pathShouldCacheLengths = pathShouldCacheLengths; +} + +- (LOTBezierPath *)localPath { + return _localPath; +} + +- (LOTBezierPath *)outputPath { + return _outputPath; +} + +- (void)searchNodesForKeypath:(LOTKeypath * _Nonnull)keypath { + [self.inputNode searchNodesForKeypath:keypath]; + if ([keypath pushKey:self.keyname]) { + // Matches self. Dig deeper. + // Check interpolators + + if ([keypath pushKey:@"Transform"]) { + // Matches a Transform interpolator! + if (self.valueInterpolators[keypath.currentKey] != nil) { + [keypath pushKey:keypath.currentKey]; + [keypath addSearchResultForCurrentPath:self]; + [keypath popKey]; + } + [keypath popKey]; + } + + if (keypath.endOfKeypath) { + // We have a match! + [keypath addSearchResultForCurrentPath:self]; + } + // Check child nodes + [_rootNode searchNodesForKeypath:keypath]; + [keypath popKey]; + } +} + +- (void)setValueDelegate:(id _Nonnull)delegate + forKeypath:(LOTKeypath * _Nonnull)keypath { + if ([keypath pushKey:self.keyname]) { + // Matches self. Dig deeper. + // Check interpolators + if ([keypath pushKey:@"Transform"]) { + // Matches a Transform interpolator! + LOTValueInterpolator *interpolator = self.valueInterpolators[keypath.currentKey]; + if (interpolator) { + // We have a match! + [interpolator setValueDelegate:delegate]; + } + [keypath popKey]; + } + + // Check child nodes + [_rootNode setValueDelegate:delegate forKeypath:keypath]; + + [keypath popKey]; + } + + // Check upstream + [self.inputNode setValueDelegate:delegate forKeypath:keypath]; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h new file mode 100644 index 0000000..acf1231 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h @@ -0,0 +1,17 @@ +// +// LOTRepeaterRenderer.h +// Lottie +// +// Created by brandon_withrow on 7/28/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRenderNode.h" +#import "LOTShapeRepeater.h" + +@interface LOTRepeaterRenderer : LOTRenderNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeRepeater:(LOTShapeRepeater *_Nonnull)repeater; + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m new file mode 100644 index 0000000..e20c232 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m @@ -0,0 +1,102 @@ +// +// LOTRepeaterRenderer.m +// Lottie +// +// Created by brandon_withrow on 7/28/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRepeaterRenderer.h" +#import "LOTTransformInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "LOTHelpers.h" + +@implementation LOTRepeaterRenderer { + LOTTransformInterpolator *_transformInterpolator; + LOTNumberInterpolator *_copiesInterpolator; + LOTNumberInterpolator *_offsetInterpolator; + LOTNumberInterpolator *_startOpacityInterpolator; + LOTNumberInterpolator *_endOpacityInterpolator; + + CALayer *_instanceLayer; + CAReplicatorLayer *_replicatorLayer; + CALayer *centerPoint_DEBUG; +} + +- (instancetype)initWithInputNode:(LOTAnimatorNode *)inputNode + shapeRepeater:(LOTShapeRepeater *)repeater { + self = [super initWithInputNode:inputNode keyName:repeater.keyname]; + if (self) { + _transformInterpolator = [[LOTTransformInterpolator alloc] initWithPosition:repeater.position.keyframes + rotation:repeater.rotation.keyframes + anchor:repeater.anchorPoint.keyframes + scale:repeater.scale.keyframes]; + _copiesInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.copies.keyframes]; + _offsetInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.offset.keyframes]; + _startOpacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.startOpacity.keyframes]; + _endOpacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.endOpacity.keyframes]; + + _instanceLayer = [CALayer layer]; + [self recursivelyAddChildLayers:inputNode]; + + _replicatorLayer = [CAReplicatorLayer layer]; + _replicatorLayer.actions = @{@"instanceCount" : [NSNull null], + @"instanceTransform" : [NSNull null], + @"instanceAlphaOffset" : [NSNull null]}; + [_replicatorLayer addSublayer:_instanceLayer]; + [self.outputLayer addSublayer:_replicatorLayer]; + + centerPoint_DEBUG = [CALayer layer]; + centerPoint_DEBUG.bounds = CGRectMake(0, 0, 20, 20); + if (ENABLE_DEBUG_SHAPES) { + [self.outputLayer addSublayer:centerPoint_DEBUG]; + } + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Copies" : _copiesInterpolator, + @"Offset" : _offsetInterpolator, + @"Transform.Anchor Point" : _transformInterpolator.anchorInterpolator, + @"Transform.Position" : _transformInterpolator.positionInterpolator, + @"Transform.Scale" : _transformInterpolator.scaleInterpolator, + @"Transform.Rotation" : _transformInterpolator.rotationInterpolator, + @"Transform.Start Opacity" : _startOpacityInterpolator, + @"Transform.End Opacity" : _endOpacityInterpolator}; +} + +- (void)recursivelyAddChildLayers:(LOTAnimatorNode *)node { + if ([node isKindOfClass:[LOTRenderNode class]]) { + [_instanceLayer addSublayer:[(LOTRenderNode *)node outputLayer]]; + } + if (![node isKindOfClass:[LOTRepeaterRenderer class]] && + node.inputNode) { + [self recursivelyAddChildLayers:node.inputNode]; + } +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + // TODO BW Add offset ability + return ([_transformInterpolator hasUpdateForFrame:frame] || + [_copiesInterpolator hasUpdateForFrame:frame] || + [_startOpacityInterpolator hasUpdateForFrame:frame] || + [_endOpacityInterpolator hasUpdateForFrame:frame]); +} + +- (void)performLocalUpdate { + centerPoint_DEBUG.backgroundColor = [UIColor greenColor].CGColor; + centerPoint_DEBUG.borderColor = [UIColor lightGrayColor].CGColor; + centerPoint_DEBUG.borderWidth = 2.f; + + CGFloat copies = ceilf([_copiesInterpolator floatValueForFrame:self.currentFrame]); + _replicatorLayer.instanceCount = (NSInteger)copies; + _replicatorLayer.instanceTransform = [_transformInterpolator transformForFrame:self.currentFrame]; + CGFloat startOpacity = [_startOpacityInterpolator floatValueForFrame:self.currentFrame]; + CGFloat endOpacity = [_endOpacityInterpolator floatValueForFrame:self.currentFrame]; + CGFloat opacityStep = (endOpacity - startOpacity) / copies; + _instanceLayer.opacity = startOpacity; + _replicatorLayer.instanceAlphaOffset = opacityStep; +} + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h new file mode 100644 index 0000000..b7c6a80 --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h @@ -0,0 +1,18 @@ +// +// LOTStrokeRenderer.h +// Lottie +// +// Created by brandon_withrow on 7/17/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRenderNode.h" +#import "LOTShapeStroke.h" + +@interface LOTStrokeRenderer : LOTRenderNode + +- (instancetype _Nonnull)initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapeStroke:(LOTShapeStroke *_Nonnull)stroke; + + +@end diff --git a/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m new file mode 100644 index 0000000..125d93b --- /dev/null +++ b/Pods/lottie-ios/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m @@ -0,0 +1,122 @@ +// +// LOTStrokeRenderer.m +// Lottie +// +// Created by brandon_withrow on 7/17/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTStrokeRenderer.h" +#import "LOTColorInterpolator.h" +#import "LOTNumberInterpolator.h" + +@implementation LOTStrokeRenderer { + LOTColorInterpolator *_colorInterpolator; + LOTNumberInterpolator *_opacityInterpolator; + LOTNumberInterpolator *_widthInterpolator; + LOTNumberInterpolator *_dashOffsetInterpolator; + NSArray *_dashPatternInterpolators; +} + +- (instancetype)initWithInputNode:(LOTAnimatorNode *)inputNode + shapeStroke:(LOTShapeStroke *)stroke { + self = [super initWithInputNode:inputNode keyName:stroke.keyname]; + if (self) { + _colorInterpolator = [[LOTColorInterpolator alloc] initWithKeyframes:stroke.color.keyframes]; + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:stroke.opacity.keyframes]; + _widthInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:stroke.width.keyframes]; + + NSMutableArray *dashPatternIntpolators = [NSMutableArray array]; + NSMutableArray *dashPatterns = [NSMutableArray array]; + for (LOTKeyframeGroup *keyframegroup in stroke.lineDashPattern) { + LOTNumberInterpolator *interpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:keyframegroup.keyframes]; + [dashPatternIntpolators addObject:interpolator]; + if (dashPatterns && keyframegroup.keyframes.count == 1) { + LOTKeyframe *first = keyframegroup.keyframes.firstObject; + [dashPatterns addObject:@(first.floatValue)]; + } + if (keyframegroup.keyframes.count > 1) { + dashPatterns = nil; + } + } + + if (dashPatterns.count) { + self.outputLayer.lineDashPattern = dashPatterns; + } else { + _dashPatternInterpolators = dashPatternIntpolators; + } + + if (stroke.dashOffset) { + _dashOffsetInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:stroke.dashOffset.keyframes]; + } + + self.outputLayer.fillColor = nil; + self.outputLayer.lineCap = stroke.capType == LOTLineCapTypeRound ? kCALineCapRound : kCALineCapButt; + switch (stroke.joinType) { + case LOTLineJoinTypeBevel: + self.outputLayer.lineJoin = kCALineJoinBevel; + break; + case LOTLineJoinTypeMiter: + self.outputLayer.lineJoin = kCALineJoinMiter; + break; + case LOTLineJoinTypeRound: + self.outputLayer.lineJoin = kCALineJoinRound; + break; + default: + break; + } + } + return self; +} + +- (NSDictionary *)valueInterpolators { + return @{@"Color" : _colorInterpolator, + @"Opacity" : _opacityInterpolator, + @"Stroke Width" : _widthInterpolator}; +} + +- (void)_updateLineDashPatternsForFrame:(NSNumber *)frame { + if (_dashPatternInterpolators.count) { + NSMutableArray *lineDashPatterns = [NSMutableArray array]; + CGFloat dashTotal = 0; + for (LOTNumberInterpolator *interpolator in _dashPatternInterpolators) { + CGFloat patternValue = [interpolator floatValueForFrame:frame]; + dashTotal = dashTotal + patternValue; + [lineDashPatterns addObject:@(patternValue)]; + } + if (dashTotal > 0) { + self.outputLayer.lineDashPattern = lineDashPatterns; + } + } +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + [self _updateLineDashPatternsForFrame:frame]; + BOOL dashOffset = NO; + if (_dashOffsetInterpolator) { + dashOffset = [_dashOffsetInterpolator hasUpdateForFrame:frame]; + } + return (dashOffset || + [_colorInterpolator hasUpdateForFrame:frame] || + [_opacityInterpolator hasUpdateForFrame:frame] || + [_widthInterpolator hasUpdateForFrame:frame]); +} + +- (void)performLocalUpdate { + self.outputLayer.lineDashPhase = [_dashOffsetInterpolator floatValueForFrame:self.currentFrame]; + self.outputLayer.strokeColor = [_colorInterpolator colorForFrame:self.currentFrame]; + self.outputLayer.lineWidth = [_widthInterpolator floatValueForFrame:self.currentFrame]; + self.outputLayer.opacity = [_opacityInterpolator floatValueForFrame:self.currentFrame]; +} + +- (void)rebuildOutputs { + self.outputLayer.path = self.inputNode.outputPath.CGPath; +} + +- (NSDictionary *)actionsForRenderLayer { + return @{@"strokeColor": [NSNull null], + @"lineWidth": [NSNull null], + @"opacity" : [NSNull null]}; +} + +@end