diff --git a/.gitignore b/.gitignore index 5a8790d3f5..dee9027c4f 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ Lottie-Screenshot/Lottie-Screenshot.xcodeproj/xcuserdata/ Lottie-Screenshot/Pods/Pods.xcodeproj/xcuserdata/ Example/.DS_Store Example/lottie-ios.xcodeproj/xcuserdata -Example/lottie-ios.xcodeproj/xcuserdata \ No newline at end of file +Example/lottie-ios.xcodeproj/xcuserdata +.DS_Store \ No newline at end of file diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 94d10d8a19..f6e36df3ab 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,15 +1,15 @@ PODS: - - lottie-ios (1.5.0) + - lottie-ios (1.5.2) DEPENDENCIES: - lottie-ios (from `../`) EXTERNAL SOURCES: lottie-ios: - :path: ../ + :path: "../" SPEC CHECKSUMS: - lottie-ios: 8b959bce82f84e42d832d605f5bab9d9edba8ad2 + lottie-ios: 255a0e95973a5c4424e809d7a5c19f7384c73e84 PODFILE CHECKSUM: 6d1e1685b831b9c2307e9f025c2992df8d660bdb diff --git a/Example/Pods/Local Podspecs/lottie-ios.podspec.json b/Example/Pods/Local Podspecs/lottie-ios.podspec.json index 4429fb92ef..b563129dc8 100644 --- a/Example/Pods/Local Podspecs/lottie-ios.podspec.json +++ b/Example/Pods/Local Podspecs/lottie-ios.podspec.json @@ -1,6 +1,6 @@ { "name": "lottie-ios", - "version": "1.5.0", + "version": "1.5.2", "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 enginineer 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", @@ -13,7 +13,7 @@ }, "source": { "git": "https://github.com/airbnb/lottie-ios.git", - "tag": "1.5.0" + "tag": "1.5.2" }, "platforms": { "ios": "8.0", diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 94d10d8a19..f6e36df3ab 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,15 +1,15 @@ PODS: - - lottie-ios (1.5.0) + - lottie-ios (1.5.2) DEPENDENCIES: - lottie-ios (from `../`) EXTERNAL SOURCES: lottie-ios: - :path: ../ + :path: "../" SPEC CHECKSUMS: - lottie-ios: 8b959bce82f84e42d832d605f5bab9d9edba8ad2 + lottie-ios: 255a0e95973a5c4424e809d7a5c19f7384c73e84 PODFILE CHECKSUM: 6d1e1685b831b9c2307e9f025c2992df8d660bdb diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 667c6188c3..eadba048ae 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,198 +7,322 @@ objects = { /* Begin PBXBuildFile section */ - 0050118F75A07FBD8A6FB85FF7F78ED9 /* LOTGroupLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C88C9CD01610FF1CA51092B5A23A4EE /* LOTGroupLayerView.m */; }; - 00ACA73AFF286C258694CEAE78733DB9 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB591717486019552A2EDC7CC23C5FF /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 028F052FF06EE9BBEA2F6CDA1C794B42 /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 135366D2D175D55F9BAA7638528E2658 /* NSValue+Compat.m */; }; - 03A6FDEED67E116DE6C1A75D73770C9B /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = F080B2BBDEBC22A95A2703D948A9F160 /* UIColor.m */; }; - 0598314D349CD9F818CAD8F20BC6CC9A /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6F1FDABFE7BA46F4C335C355203BD6 /* CAAnimationGroup+LOTAnimatableGroup.m */; }; - 05F0B7C16305D661EC5AAB8133C4ECFC /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = B2B5D49E03C30CB6267C9203F209D484 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08B10BCCC1E87B81687EA6B0D05A9275 /* LOTGroupLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 57DC28EC5873B72A9C2B9CF1CE17D042 /* LOTGroupLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F6300332B3B5A3A4F595FA5FF0681E1 /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9E8CEEDDE48C9C1DB72357B3C719FA /* LOTShapeTransform.m */; }; - 1005026580D1A0EE6BF10DC58CAE4172 /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 34AAD18AF1E8ADA45067CCF6637357FC /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 102E32591CDD3DB9BEC5AECC2278CE15 /* LOTCompositionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E6E83A8E496CBAE5AAC3B3D9299E2AA4 /* LOTCompositionLayer.m */; }; - 1097EA5C016455DF2744F8E5C33F6F13 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB591717486019552A2EDC7CC23C5FF /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1497E43F3CD0AE36A2021B7E188EF755 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F78C64D2ACDCA9E1704E626F92D5AD /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 00321FA7409EC08E3572FC5E5B2D68FB /* LOTAnimatableColorValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CE6E29CA535D5519BD6F9F9B13A3A4D /* LOTAnimatableColorValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01715488E9D85646866EB4D366DB8C23 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = D96056B276FEF7990D76B5332D196731 /* LOTRenderGroup.m */; }; + 03C61D00F7B3511ADBA0E133008D9645 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AD96C504BE13F612B1F34B4A2E69299 /* LOTShapeRepeater.m */; }; + 05D1A1AA0FEC0FEEF0ABA9A27D61BA39 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D967F48ECE504C7D000E74AA8DB233 /* LOTAsset.m */; }; + 0636DDB91687977122626E0F4F3E898F /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E844D49ECF9A50C37531AB79BACCCDD /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0660C2F09502000A127447A25A98F149 /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 63D30BE9BE2D1E59FF5D0BEE1D19D619 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07CA70F3CE9BD6F37881055453755C87 /* LOTEllipseShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = ECFB5C58404EA5C9ACE0F9C8C4DFE7E8 /* LOTEllipseShapeLayer.m */; }; + 0833A1EA4D741C0C69870B8EF05CA3B9 /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = B5373820252BAF7D1D6DC04D4A803B85 /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0846E63E02F28D4497ED652FB550042B /* LOTLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A631F9D585137CC027709307819643B /* LOTLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AB95A613B2441FEE5C497FCEEE27EFC /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = F284632DA860D431BE72D6D7CE04C2A5 /* UIColor.m */; }; + 0B3F2352C5C5E4476F2C4DD72B4D146F /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1DBBDF91449577D8F6EBEE01FFD35D /* LOTCompositionContainer.m */; }; + 0DB4B2887F111083A578332E81026C54 /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5181E6B39A20B38D9B4E34EE983361EF /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E2A99564583095A5793CC2700E71D35 /* LOTEllipseShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = ECFB5C58404EA5C9ACE0F9C8C4DFE7E8 /* LOTEllipseShapeLayer.m */; }; + 0E46C0445C1810BAE594CDC7285A21A3 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE15440B0DFC9DEEC53410CD14156D8 /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F54AB30AC85B9131E2F91D2B40050CF /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC07B2467EB02A33FAF22C75C90CC88 /* LOTNumberInterpolator.m */; }; + 0F83F8CF23761036BA313EF823CA1AE1 /* LOTRectInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C95BB9E40A9A21F4E352844B519F91A /* LOTRectInterpolator.m */; }; + 11249B63480418B1EF0F47BCFAF6FC88 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD6C4BBBA4E90ED57238F63DADC3E4B /* LOTShapeGradientFill.m */; }; + 13018C0A28AE8F0AE3A3A4DB1E111AA9 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D8F2ABDEE048AF63C15AAAFB7393526 /* LOTMaskContainer.m */; }; + 1390AF1B3A49C5225BB378E048211213 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE22E44E0D473D26B9E644895267DA8 /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1505F101FC841119C415133AA8E4790A /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = DA204F5D822B2BA0EC33E894FA33D148 /* LOTRepeaterRenderer.m */; }; 15FC70FD083E40FAD0F5944D41DD88BE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; - 16196C32B4839D7178B241E1F6204B82 /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CA0CDC65069F76EC463C7BF822D8F81 /* LOTAnimationTransitionController.m */; }; - 17E30E4F832BEEA12DA5340B6EEB5CC5 /* LOTGroupLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C88C9CD01610FF1CA51092B5A23A4EE /* LOTGroupLayerView.m */; }; - 17EAC837F71A0005CAB6DD9573D39409 /* UIBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = F3209E4D9AC30E57E54489362BA4B728 /* UIBezierPath.m */; }; - 199226E869357BD58701ED83BB5AE20B /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 84BA71AD6D24ECBF13FA2CC24E3C3EB2 /* LOTShapeGroup.m */; }; - 1ADA8883596CBB8F7F605A24C7366B5E /* lottie-ios-OSX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B9C926B498D73B1C3824C2B9732454E3 /* lottie-ios-OSX-dummy.m */; }; - 1B30DE81460C85578CA35E6ED2AA3099 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2FEDF4A82D7854224BDFCB4266741D /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B389642EC951667D3F5BC78CFF41267 /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 90F28D953D30A989FA29A1ABB565837A /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D8803B28867AACF30BEAF580A2DF6E2 /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 637635FDA11763E443BE882445C8F865 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22934177442B811EF33EE637DB0DD579 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = C90C311450EC6DC84E23C510D63B960F /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2304DD9022DA728FA4F1C242619ED8E8 /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 58C8E12079AAF4734658684503009718 /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2657BC24AF6F7BDA84A606A3CF42CA16 /* LOTAnimatableBoundsValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CF51B50C6B7972E0415722CB41EE05 /* LOTAnimatableBoundsValue.m */; }; + 17099FA6A2D94A7A8617BF4106AC3A13 /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = DE1654180F1E3D404AD74E405A8809A0 /* CAAnimationGroup+LOTAnimatableGroup.m */; }; + 18DB15626661FD19FA24586BD77BE6A9 /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = A783A313156EA232996758A6B2CCEB0B /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19F9CC9C13DDBBD01C220156FBBAC125 /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1DBBDF91449577D8F6EBEE01FFD35D /* LOTCompositionContainer.m */; }; + 1A20ED2CD5B13C908B8E8117E0FA9AA5 /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A032173731A7ABB16873D91D5BA9EEBF /* LOTTrimPathNode.m */; }; + 1A853C5169F12E1960F312DD26B4F34F /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1C1DBC0E70EB8726F3CC0383B80073 /* LOTKeyframe.m */; }; + 1C0139B2AAA0CBFD0FC7224FE7D0CA54 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 7405DBDB8E500FB807DFB9C657855A7B /* LOTCircleAnimator.m */; }; + 1D8C1FCA760D0382099BF1ECC75766D8 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = A805DC88D13AB289304EB1618C1532DA /* LOTPolygonAnimator.m */; }; + 1ED1A60D3B8521C32DEA8DF81FBE4509 /* LOTStrokeShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 25E8BB410932122E05451F34B19D2760 /* LOTStrokeShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EE4F828F5E2FDAD57520B7679D2BF25 /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B037A4CD134F5DC66F89C0BB553A896 /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F30B6E70D08BC569F2775C5346ACC8B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */; }; + 213727523396C6304ADD120BFD6C9D39 /* LOTStrokeShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 25E8BB410932122E05451F34B19D2760 /* LOTStrokeShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 217E9F0006DE5949FC409E2940738087 /* LOTAnimatablePointValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 41172C6EC025E76933F93D5769B2177E /* LOTAnimatablePointValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22062EED1FA0038EE210F420519F5957 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EF95CCB8166AC042A5DE7DEA292F908 /* LOTStrokeRenderer.m */; }; + 229A640AACAE442C4D361AC4ED88FBD6 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = 89190F0545464BBA9E3077016A4C90A1 /* LOTComposition.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2409A8B240AABC4D2BA49E8964C854F4 /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 326D7EFBD332985E51AD7855DDA843BE /* LOTShapePath.m */; }; + 24159836244FE045ADB1D6E1BA1D48BC /* UIBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 419F1046E8EB9C2DE9FDB47AA4539CA3 /* UIBezierPath.m */; }; + 24B56187FF109D1B8D33FDA8C4D54C44 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = BA0DBDCF88E584AE2EC0B6B38D8C0999 /* LOTShapeCircle.m */; }; + 24B999B5E2EFBCFFB4A0A5A4B47B431C /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 88BDD3A36C3C66D728C2F29FB2794C71 /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 253D4C6506C03DFFAE75A2B92F2B22C4 /* LOTRectShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = BBA3A2FF0DB7F9B4F861D9B5872428E6 /* LOTRectShapeLayer.m */; }; 26927C671A95388B3C4BD8F3D8CB1D66 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */; }; - 26C9440B52690116EC8B5583F0792270 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 914414B96714EB914D61E0BEE2A8D6BF /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27CFA3CC73F41A252B701CD9EEAD7470 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = F6B56016B1B4AE46FD01AA5A099CD6F7 /* LOTComposition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2ACED1F66434F38B00C65BB20FCFB8D4 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 881EEB4F51912FE97204770FD6BB7B91 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E9DFD121168327055EE215DCBED608F /* LOTLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CFD56EA32C4E280C127079F4FB7A509 /* LOTLayerView.m */; }; - 2EA52A0E1054E433EE47665D3C7D0291 /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = E6B899FA984022ACBAC1E00F75173A50 /* LOTShapeStroke.m */; }; - 2F1661DB707B76D51664D8EC801670D4 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = A21DBF047863956DFA410BAEE3E42C1B /* UIColor+Expanded.m */; }; - 2F9FAB94B28553F868EC7BDDDF4947BE /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2051C729510DCE034CE5D49CB453D6CF /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 322E5133126F887A9EF509F772AE1980 /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A8F6DE4263402D3A5F6C3CADDE15FDA3 /* CGGeometry+LOTAdditions.m */; }; - 32342A5FF16875CBF87BC0F6FAB99665 /* LOTAnimatableNumberValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 37A3DEC75ECC68471C6A89366BC6CF86 /* LOTAnimatableNumberValue.m */; }; - 3236C440576B5350FF4A593329F6853A /* LOTAnimatableShapeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 56793538DC941950DAD1411157F487D5 /* LOTAnimatableShapeValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33AA835B80C0ADDD72609DC28B01BE95 /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ADF6456FCDD472C05DD54C7589DE47A /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33C655E1FF354F623C09FF35F7DAF83F /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2854B9A9C5594BC655C1F2A2F9B3FF9A /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34E4D2CD05189832B9A9EB0A130C678C /* LOTAnimatablePointValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3B3E78F9D14443E9EF3374C64E36C2 /* LOTAnimatablePointValue.m */; }; - 38AB672AAB18F711CD611EBD8FEAD1AD /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 245FC7E900009D6879BB913BB69D2D82 /* LOTShapeFill.m */; }; - 3A01E890B082E29BC3E2B6AC05FA6310 /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 64CD3138F22AD66144DBF1ACEC05718B /* LOTAnimationCache.m */; }; - 3C9AC2905884330F880586A72C930A84 /* UIBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC039FBA91E0B14F446E8591909284B /* UIBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E39F7B76CE8E5E9CE845190A034796F /* LOTRectShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 501BB506A518EBF1C596EB2E412F90F4 /* LOTRectShapeLayer.m */; }; - 3E98915F4A3ED64F7600FA3CA4DBCBB9 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 15F3855A2E3FB1A31C7B255C02416A0D /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3EFBE5FE5998D4937B80556EFE1C59ED /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EC75FDDFFB52B4ED42E4358DC422BB /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FA70D9812A77215F25AD61AEEBE28D8 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B243131CF5F997328F39DC9B8C5E1AA /* CAAnimationGroup+LOTAnimatableGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 405C453448D6809099DFA49A38348045 /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 086D453C029FEA4E5D07A0CF42F5EAE9 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40BEF7B24FCC147ED27B090F862F25B6 /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2854B9A9C5594BC655C1F2A2F9B3FF9A /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42DB835C32BA71F1A85A5B37CAB0B57F /* CADisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 2291D10156924ED8ACF668F742BA4EFA /* CADisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4645394224209282E792C8228848561A /* LOTAnimatableNumberValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 76643F10D8F856E523E3B86403ED8862 /* LOTAnimatableNumberValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47133BA53ED25EB501CD920A7EB38C3A /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B243131CF5F997328F39DC9B8C5E1AA /* CAAnimationGroup+LOTAnimatableGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47D7E761E2AE4DED71C15463FD060CA7 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 84BA71AD6D24ECBF13FA2CC24E3C3EB2 /* LOTShapeGroup.m */; }; - 4883E5701E68D84600027E57 /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CA0CDC65069F76EC463C7BF822D8F81 /* LOTAnimationTransitionController.m */; }; - 4883E5711E68D84B00027E57 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 914414B96714EB914D61E0BEE2A8D6BF /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BD83C032B6F24FCFE7536C6FAF4BE9C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */; }; - 4C4037AE09CD91F363F8D79D5ED6E079 /* LOTStrokeShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C4E7E7E5B2E25ACB2BD6E6A3EDE38D /* LOTStrokeShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C896FC0C97800BB6CE431B6B0C289E0 /* LOTAnimatableBoundsValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E677FA9492A8C0F8CF594651DE45ECA /* LOTAnimatableBoundsValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E254C733BBF03B4A88371C296D4CE3F /* LOTMaskLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = CD73C7C52052CD35A0DDCBAAEBC58080 /* LOTMaskLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F003A28EFFEA2BA264CE03DC6ABEECD /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 15F3855A2E3FB1A31C7B255C02416A0D /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5159A8BF6ED533B289AA085AD982FCB4 /* LOTMaskLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = CD73C7C52052CD35A0DDCBAAEBC58080 /* LOTMaskLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 515A957A190713424E7F402F3E17CB8B /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D08AFCE3A77543E1ACC022CE32E8CB2 /* LOTAssetGroup.m */; }; - 519CD8089F30FF8AABBA56E5B09C0ECF /* LOTAnimatableScaleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B0F7BB6147A18AAF6611D0F19252F05 /* LOTAnimatableScaleValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 538D2B7C257BADD5A7A71896DC79BAF9 /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8698F0871C3DF54D5ED95C86B908DC10 /* LOTStrokeShapeLayer.m */; }; - 55096D1BC2001E5C4C49D28912CFC52D /* LOTCompositionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E6E83A8E496CBAE5AAC3B3D9299E2AA4 /* LOTCompositionLayer.m */; }; - 5550F613815068F9465F1BE65641363F /* LOTLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ED0EE10CC23DF4EEE54CA6FCE2EFDC7 /* LOTLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55B1C043E33F6CADC4E08BE24A165B91 /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B9191C9CA6BC255452FF3A1E23A8AD31 /* LOTLayer.m */; }; - 57620F2816A0D5DC06D6B6A00787EC30 /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B34B557DAB322300CFBB55DAA449B4 /* LOTShapeTrimPath.m */; }; - 57CFA6C49999259AF1A2E733C0163774 /* LOTAnimatableScaleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B0F7BB6147A18AAF6611D0F19252F05 /* LOTAnimatableScaleValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59888D1D67B90D17D579CAD420BBB1D3 /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = B2B5D49E03C30CB6267C9203F209D484 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59E2531272AD19AF242FF4D4159621CE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; - 5BD63C7A427B0F888A8B0A3C6CC4CDA9 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = 19C656A498AE48F5DD283FE85E50C005 /* LOTShapeCircle.m */; }; - 5BE228F0C3944C76871A60CD99101A71 /* LOTShapeLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5710AF0C8EE895A5CD661C97A865E9F1 /* LOTShapeLayerView.m */; }; - 5CB529DF9A7C1B9BEF528941C68F1E53 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F45FF19B69DCCD5C9D90CD1DCD8E196 /* LOTAsset.m */; }; - 5D448A1D8C9D15483BC81CF504788523 /* lottie-ios-OSX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 143FBAE486947C2718AE48A507426B54 /* lottie-ios-OSX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F71C2EE951F227DAF312ED95FC7C750 /* LOTCompositionLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 62D10B08778FD7C95EF48165655F8766 /* LOTCompositionLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FA33F060560E3664F0B6D0B5BF9D4E7 /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 34AAD18AF1E8ADA45067CCF6637357FC /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 601B713FD106CF6886088141B1759314 /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D08AFCE3A77543E1ACC022CE32E8CB2 /* LOTAssetGroup.m */; }; - 607EF7BF53564F11402B0FB1E5DBAF24 /* CADisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 2291D10156924ED8ACF668F742BA4EFA /* CADisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6114612EA4D13ECBA52BEE27D01CE766 /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B9191C9CA6BC255452FF3A1E23A8AD31 /* LOTLayer.m */; }; - 6122543A141FDD8065E799AB13F4CF66 /* LOTShapeLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5710AF0C8EE895A5CD661C97A865E9F1 /* LOTShapeLayerView.m */; }; - 64610B08EA3E16D78270D3D0DFE5CBB8 /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A8F6DE4263402D3A5F6C3CADDE15FDA3 /* CGGeometry+LOTAdditions.m */; }; - 64A1F81854F150AEA285EEE3DDC437AD /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 64CD3138F22AD66144DBF1ACEC05718B /* LOTAnimationCache.m */; }; - 6582149C4680B3CF13FDF83D7EF9A063 /* LOTAnimatableShapeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 56793538DC941950DAD1411157F487D5 /* LOTAnimatableShapeValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 661E56EC0F97C1D2D9CF997B023FC7BF /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 637635FDA11763E443BE882445C8F865 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 663F4E5F9123B615097FC501305D5787 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5407A58FD4D852D55BBE6B75176EF5DC /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6666E5DA54A388EECEF6AC4C086FC561 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 881EEB4F51912FE97204770FD6BB7B91 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 68A2BA4CE73ED32CC675BC82C1B977FC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */; }; + 26A7495AF51DACDC4C1D273528449646 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA2D1FDF82BEBD6CFEA688AB7665DC0 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 26EC2A5DABDE376051EBC57DDE1F67E8 /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9540149A0E41F9B4BEB62BE4113555 /* LOTRoundedRectAnimator.m */; }; + 276CBF965D02301E5A0F820AD63183E5 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A813F7ADF83DB801E58EA8E406F8C0E /* LOTShapeGroup.m */; }; + 290192EFD91A84FB87EB1E53391A73D7 /* LOTAnimatableScaleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = EA810243EBC8D6BD1B79599FCE41C4C7 /* LOTAnimatableScaleValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29CE796AA045B5AD804F77161A760A09 /* LOTAnimatableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 144D7020F1BD068ED8C973E5097905AE /* LOTAnimatableValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A72F86EBBEDD90F3FC9D163DD9BBFCE /* LOTRectShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C4857339627199703934116F2FC0CF09 /* LOTRectShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3117F39877B6F22718B64E952ADB8AAD /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 1420D2A58C8D413E49BABE36F8F18127 /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31924E1CA741A3B8CB9B0726DF25C205 /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = F284632DA860D431BE72D6D7CE04C2A5 /* UIColor.m */; }; + 319A449DE71CBA09F9A1871F85FA2CDA /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 318636ED189D69AAE648762B88DF8C4E /* LOTShapeTransform.m */; }; + 322676880F9CBDE7D3C9FB39987FB016 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 219BBEA62320DD9F344BB4B0E7D95613 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3372C0BD9E8D42B77BC8AD0F1B04DAA1 /* lottie-ios-OSX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CC0BDE6346F89ADB5DB741F83E073E /* lottie-ios-OSX-dummy.m */; }; + 337357CBDA4F5AE42E5B14F8B354BC84 /* LOTCompositionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D13D9E1B7535012933250907D1457AD7 /* LOTCompositionLayer.m */; }; + 337D6CB1EC23EEAD83CD7242385EE2E5 /* LOTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 57A80B376732519811B58F9B732D68E8 /* LOTMaskLayer.m */; }; + 35226F11EBF10947441AF3F4ED5F23C5 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D43DCCF8C1ACE74CAB533898E703C37 /* LOTBezierData.m */; }; + 36957EBED06C6F51845138938999F94F /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D43DCCF8C1ACE74CAB533898E703C37 /* LOTBezierData.m */; }; + 37C2C6885744FB8D93FAD75547D0803A /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E642B97A89EABF6D7259848C8AADE7 /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37EA6A084060F03A7D70AF8999DDBE7A /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = B5466FB41481AE4C1D2D3B41094ED320 /* LOTBezierPath.m */; }; + 38A76BAD1B166DFC9ABEB7E0999D795C /* LOTAnimatableBoundsValue.m in Sources */ = {isa = PBXBuildFile; fileRef = FF9466C2CE362E7F670BEA870AEEC29A /* LOTAnimatableBoundsValue.m */; }; + 38EB869790AA3DE87F79D8F468068AED /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = B992FB464B1C74A558428D9ACD5726C5 /* LOTAnimationView.m */; }; + 397A0D1DEA821AD1B26CAE1A92BC59A9 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7515071DDB6440F570FAD195780ED /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3993343517111ACDD609A1EFBF7D263B /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 63D30BE9BE2D1E59FF5D0BEE1D19D619 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39B519B37B5552DA8E3B577B85DEEADC /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3445372404148934206C8AD88C866A6E /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39C857CE2E52D8A3DEA32B822AB25B8E /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = DCACDE3182C346B0BC0D8388F899D9FA /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A06BF115985F97F41352DBF6FA2D714 /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E4BF2FF4C5A3F3C7B74A46AD379DB47 /* LOTShapeFill.m */; }; + 3AAB5152044505FC0419ED1DE11872E9 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = C29D693FABA3C811A0FC935937BB3E0B /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3ABC7DC48D73BBD3F2034B023F66CA3D /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = BD8F152A1D1F152CE88E44E4D6BBEE00 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C618867F8471C0E2CD2B51DF00ED27C /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = A783A313156EA232996758A6B2CCEB0B /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D8C83712F0A3E0EDA42F41471B2F4C4 /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = A426B57B24F902D565A50CCD92E93E58 /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E0465C04328E570C9C6C70A77852CDC /* LOTAnimatableLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3C789D96D4B0A33675C6BFF14EBA1A /* LOTAnimatableLayer.m */; }; + 3E4C736ED8978556F2385A59524C2853 /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F140E4F97B741FBE92D6D3B091F5284 /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E735014EDB9A8CF1E92F699778F44D3 /* LOTGroupLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C30AAF86EA9753FC2DAE56E8906A311 /* LOTGroupLayerView.m */; }; + 3E8438C2D01BFF9F13B6256477F996E6 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 69B2030F2D768F96895BF34166D45CBD /* LOTPathInterpolator.m */; }; + 3E9AF6D8163133C1F8D05AD6DADDF860 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 388024020FC28E589F205A89434EEE95 /* LOTShapeStar.m */; }; + 3F75663A1A9F066CBDCC0F7C5E7F48AA /* LOTCompositionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D13D9E1B7535012933250907D1457AD7 /* LOTCompositionLayer.m */; }; + 3FB98EAB76B1D222743621D7F896BC59 /* LOTAnimatablePointValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 43D525DEBA25C886A81FDF7B726BA577 /* LOTAnimatablePointValue.m */; }; + 4198F2AC553CBB43BBA817C3014152CE /* LOTAnimatableColorValue.m in Sources */ = {isa = PBXBuildFile; fileRef = CD5E1880A9D4AEF5D8CBFAEF7FB1E1F9 /* LOTAnimatableColorValue.m */; }; + 42A95071DE6F496FDA046EF5B3FD8677 /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 58D7E8EB20DD1B2C5D8BB8D915513D29 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 439C991041031F38EE7FE60A3D1B7E05 /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A032173731A7ABB16873D91D5BA9EEBF /* LOTTrimPathNode.m */; }; + 45EEA05A69040D8892BEACE0C687E82F /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 79CE823B01068A2EEAF747C0D9EAAD96 /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45F8CCAE26DDCCADDC68F964E2AA5AF6 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = AE1AE5DB601506215E5F0DA16B9D95CF /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47723D618F2CBB296B0263788A2FAFE9 /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ABDE11857F92386508F3CBE215EEDE8 /* LOTShapeTrimPath.m */; }; + 47C17559034BDCF81A01733A083BD8F2 /* LOTRectInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BEA1C09A4450FD89F07B65C4CC0936 /* LOTRectInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48445000D12A676012F62EE1C5EEF7FE /* LOTAnimatableShapeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0552670BA1CEE193554BAA92420F7D04 /* LOTAnimatableShapeValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 499EC7AA44A86F2BE607C7F515219A93 /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ABDE11857F92386508F3CBE215EEDE8 /* LOTShapeTrimPath.m */; }; + 4A807433B3E0B61648CFB862E6399A82 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D6D30F36C16285258371999FDA5FA66 /* LOTShapeRectangle.m */; }; + 4A8488AD7F1548BDDF9970DB2803A640 /* LOTAnimatableShapeValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FC4E4FE5282714187DF1A0B77A3A941 /* LOTAnimatableShapeValue.m */; }; + 4AAED03BA02C00507FB73B9082813C95 /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = D8EF06019D9076C6EEB83F463501D92C /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4AED9ECE624255896BD8D181E47572C6 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE980BBA27BAE090D28D90AA8709981 /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BCC5013001FC33D5C4FCF9633649C91 /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 58D7E8EB20DD1B2C5D8BB8D915513D29 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C23953476BB3BA7CF4C801239BCBC5A /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1F1F8F670D2EB6EAFEBD673C338ACC /* LOTPathAnimator.m */; }; + 4C6F0504215F9333468C970CCA2E156D /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = A0C988E83B337ACF752F6C9101FC6608 /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4EC59F7745228E8915B03811328FBBF1 /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EEF78B0574E13E845F3AD68DB7671CB /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4FE7C0557B031072A72BD08EFE9BFDD1 /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F140E4F97B741FBE92D6D3B091F5284 /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50B11C5938D460A7E2DF8A196038499A /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = F4BE8C929E79B1C17ED2794374349B06 /* LOTShapeStroke.m */; }; + 514C8A5124D34B07833106D01704A5F2 /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = DE1654180F1E3D404AD74E405A8809A0 /* CAAnimationGroup+LOTAnimatableGroup.m */; }; + 518A13576853C3AB08824FDFC2863808 /* LOTShapeLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D9AF86F883FCECA2AE47C933BE72E6 /* LOTShapeLayerView.m */; }; + 520BF95322EB2209677D4A0FFC3A22D4 /* UIBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 419F1046E8EB9C2DE9FDB47AA4539CA3 /* UIBezierPath.m */; }; + 5587E20EFBA626E2A7D95A59D466AC20 /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 17E642B97A89EABF6D7259848C8AADE7 /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55AF3A6C29534493B940DED7956EA08C /* LOTAnimatableNumberValue.m in Sources */ = {isa = PBXBuildFile; fileRef = FE66595595D6EFC9940ED68A7F0CB95D /* LOTAnimatableNumberValue.m */; }; + 56604C133D97B4CD9FC0EFCC9D6A0592 /* LOTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 57A80B376732519811B58F9B732D68E8 /* LOTMaskLayer.m */; }; + 57A8EC974D054B971501319BA567AB08 /* LOTRectShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C4857339627199703934116F2FC0CF09 /* LOTRectShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 596BF301DC623CB4EEAF111677DEC058 /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F46A835F009EAD5B465E106483FBEBAA /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59A8B54AA10E119DB2D9BE65234592CF /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A20DB0B63D081E857C1B0A169C5E94 /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A94B27C1718948EBAD42BD95ACF2DB1 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D6D30F36C16285258371999FDA5FA66 /* LOTShapeRectangle.m */; }; + 5ADF602CEB4E463567028A4038CC3930 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 759FE25B0ABE022202F7A1A1729E590F /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B13E2C93CCFEE479FB870D0D98EEC9C /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A2D07E396EAC0B4E40CA9FAA21CE962 /* LOTStrokeShapeLayer.m */; }; + 5C006EF8CE986CC7283DF7EA4629614A /* LOTAnimatableLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B22149E837A08CE923717A44E9206F1 /* LOTAnimatableLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C9D73D05443D31C1C45F360DC21F79F /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = E611F5226F9E156701013E03E5DF7933 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E2D6A8BAE8B343307DC3104441A994B /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AF177F139DE4C983CE5B58D93715AA5 /* LOTAssetGroup.m */; }; + 5E687BBFDCFAE4697162F151D1F3C6BE /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A20DB0B63D081E857C1B0A169C5E94 /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5EAEB286CA549282B1FA01D432FF13D0 /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C907346244458A0AA1ED86C7784232 /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FC04048D99C9724B695D31A923DB038 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 25D72A954C42B01E2A3DEBD7AF636F16 /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FE1CC2F2702576116AB72181BF1D760 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = CB0E12111C5B1EBBB64754A889D30B27 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FEFC8B5AB0115C6B49F88B553351B2D /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AF177F139DE4C983CE5B58D93715AA5 /* LOTAssetGroup.m */; }; + 6006EAE95D9F915374278C0180B87579 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 759FE25B0ABE022202F7A1A1729E590F /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60EA2AF78B44CFD4E4AA7826952F4ACB /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = A805DC88D13AB289304EB1618C1532DA /* LOTPolygonAnimator.m */; }; + 60F4AE5E41F5CE228A76FE7764C1797C /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 79CE823B01068A2EEAF747C0D9EAAD96 /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 620C006871F134D0A36CEBCCE6235C31 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */; }; + 625B63A591AF3245ADC41321E5121E54 /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5792012DF7DDB09830FB0C73AB2D05CB /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62E8B2D7010EB096097D3D0EC715FD8C /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE980BBA27BAE090D28D90AA8709981 /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62F61E3FAB3036AAE9844FC1C2D4D814 /* LOTEllipseShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C0788335ADFE1D57ECC80FDE8696CB /* LOTEllipseShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63233107F0F58122B9F430D711C74C14 /* lottie-ios-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0508D1F4EB475E8EA9FD7082C7562045 /* lottie-ios-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 645EC6D2B7DB0E9B6458A2F28210B62C /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FAFDA2EC2EE1832050C325881172C24 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 649756610D49C44F62524EA678CC501A /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 501AEE9E3360814DD5B45B9366E6F115 /* LOTPolystarAnimator.m */; }; + 65577777457E6DBA5D3B8621DC5817A5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */; }; + 656B081D2C66D7E2B9DF5F3D153A70E3 /* LOTAnimatableShapeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0552670BA1CEE193554BAA92420F7D04 /* LOTAnimatableShapeValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 669F35630C96112A217C9B8F01F15DBE /* LOTRectInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BEA1C09A4450FD89F07B65C4CC0936 /* LOTRectInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67EAA8CF3A2A489C3F7BF2620BE8482D /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D16B0A88C42F3A45DFCBCE2B83E73A /* LOTLayer.m */; }; + 687E3E1DBC736FCCA2A52D49C6F96383 /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = B2F443FBC6741B221175CA34596BEFF0 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 68A5E7B6436C936D491684079A7EA75D /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B720945BE745838340B12DAE2DACE7D /* LOTLayerContainer.m */; }; + 68BFFFD7320B5D67FAB7FA5EFFCB216D /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE15440B0DFC9DEEC53410CD14156D8 /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 695E0CCAE6F585FBCDE5F397DA85EC93 /* Pods-lottie-ios_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A0CC55D11A791A4361B86F63BE68CB7 /* Pods-lottie-ios_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E25DB56FA93546647DFF1E2F815D73D /* LOTAnimatableColorValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D4869FFC14B1BE3C9C20B5C9E01698 /* LOTAnimatableColorValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6981F40514843D8324E98016657FCFBB /* LOTCompositionLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = CC7C2BB575EE57203BE0FD9BFFA53497 /* LOTCompositionLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A34BD5B4F29770E76222C86EC329DC8 /* CADisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 97194F258F84546499008120D1B31065 /* CADisplayLink.m */; }; + 6CF9B85D3E2A82F6F2A5CBD3BEBDB876 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = DA204F5D822B2BA0EC33E894FA33D148 /* LOTRepeaterRenderer.m */; }; + 6DD667989E1484D1B7B44E937BEDB591 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = B992FB464B1C74A558428D9ACD5726C5 /* LOTAnimationView.m */; }; + 6E3DEBD95752E200627094E08A49DB35 /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 296A78F539AD47B343BFE43C21E5DBAA /* LOTFillRenderer.m */; }; 6E546A07530D4E0B229B36F2BC7AFC89 /* Pods-Lottie-Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FF91F9344AF5B9FAEB941DAFB89A1A43 /* Pods-Lottie-Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 734A160E17B2F3B0DE0F6ED67CA3C3E9 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A6B62DF1DBBB373E0B2BACF705AB122 /* LOTShapeRectangle.m */; }; - 7411FFC4811939A68D17A43A2B1D0BFA /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ED0494E573973A4A8CE20BC61BD7741 /* LOTMask.m */; }; - 7426A3BC35EA13C8E0616A474A1CDCE4 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D60D8B243F07BFF1F4037F70108FD8F /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EA1EAC1642F98E4FC267D131131851D /* LOTAnimatableBoundsValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8223CC17B3077CCB25A39BEF25012AE1 /* LOTAnimatableBoundsValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EF2171DBED293EB6014EBC73519D092 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C360BBF96FFD291D8FA8045AD64EC9B /* LOTAnimatorNode.m */; }; + 6F167BEA4489FCC92ADD64A44D2301C4 /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D565BCD46DF53304253F2C6DF7B7EDF /* LOTValueInterpolator.m */; }; + 6F5D6A6855C5307599D0099105CAD6DE /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = D96056B276FEF7990D76B5332D196731 /* LOTRenderGroup.m */; }; + 6F91ECF29F6E6F0232861F04B2F1C104 /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C907346244458A0AA1ED86C7784232 /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7075E1B6967475C7E75D4C1148CE140A /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D1FD2DA1AD70E052254D75D8BCCC3F7 /* LOTComposition.m */; }; + 708D62C125905EBC4CCD0A51F6324D0E /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 318636ED189D69AAE648762B88DF8C4E /* LOTShapeTransform.m */; }; + 70AB374ADFAB314408485338DF234EA2 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 674ED4B84410CEC4438324FCED634104 /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 714570634F714C9BCAB992BDF848733B /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE2F9A829A810DF3991EB1A84212177 /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71D3B0781F64F773BAC62ACA2E8FCA6C /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = DFCEA9355A28F04AF74A8CA27F76AB87 /* NSValue+Compat.m */; }; + 7276909122AD5C0DB0847DD10E820060 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 094A2F666BB5BDABA9202EE2566B0431 /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 73F8E25DC0CC2902492CA680FE07360D /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A11DF77F3716538B028EB899339EEA2 /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 743F2EE40EED9AFC90EC9B25CC96DEA0 /* Pods-Lottie-Example-MacOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB1C51ABEB93789541905240DF926E8 /* Pods-Lottie-Example-MacOS-dummy.m */; }; - 756A97B96D7D6E00B01B75785F63761C /* LOTAnimatableShapeValue.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C6E91956838B1D9712FFE89A954CDC /* LOTAnimatableShapeValue.m */; }; - 75FDBC6F8D70AF8FA5CCE5D539B715FB /* LOTAnimatableNumberValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 76643F10D8F856E523E3B86403ED8862 /* LOTAnimatableNumberValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7686B9EAE1AB4697AB736CE04191A77F /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2FEDF4A82D7854224BDFCB4266741D /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76ADD94CD6300AB4B72ACA5D603F223E /* LOTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB90BAB8F6CA800171B1FA971BC8F51 /* LOTMaskLayer.m */; }; - 776C45A7FCBAE080154C39273751B3E7 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F78C64D2ACDCA9E1704E626F92D5AD /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 77CED3A2EFBA61E4666214D9774322E9 /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 086D453C029FEA4E5D07A0CF42F5EAE9 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7924FA65B26632ABBC39B8AFCF8E80A5 /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 90F28D953D30A989FA29A1ABB565837A /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A382830511CFB02F38892AF1F7F8C38 /* LOTAnimatablePointValue.h in Headers */ = {isa = PBXBuildFile; fileRef = A967CCA3990EA603337F2488E57F0AD9 /* LOTAnimatablePointValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AEAC4C9E4D17A246B86DE3E08CB1E21 /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9E8CEEDDE48C9C1DB72357B3C719FA /* LOTShapeTransform.m */; }; - 7B11A7C3F5F2BC0D32A167825B960B63 /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D467970A714314E2B75E0E5425CDBD /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D74C784331EF43CF0917B59586596AA /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E557697A150EC866389A6FE90663F36 /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 812A8E2BDA7BDB4EC3513277C931CB41 /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ADF6456FCDD472C05DD54C7589DE47A /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 815605CDA4B94BF088A86C35A4CED0BF /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6811434B3DAB7754101483A530405466 /* LOTShapePath.m */; }; - 816E83627E0EF1AE79B562E8A35A6D52 /* LOTEllipseShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 116280A338E6B12358C68FFD8BE4CDE0 /* LOTEllipseShapeLayer.m */; }; - 81CDE43E52520E629B57C4F7EF9A2BE1 /* LOTAnimatableLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3865FADCCADCC789674635969A6D45AD /* LOTAnimatableLayer.m */; }; - 836ED9462A5D5E630D582FFDF447D08C /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = ABC798B7199E43A9FFAB300F4B8014F9 /* LOTComposition.m */; }; - 852379BDF000E374768FEA270C55CCB1 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F45FF19B69DCCD5C9D90CD1DCD8E196 /* LOTAsset.m */; }; - 8CAD0EFB21AAB56A0A31E101E1128F71 /* LOTAnimatableLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 39EED9104A47BEAEF0F430C1FF4CCBD8 /* LOTAnimatableLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D16A1F3DEB3157FD40DCF240D9B0E7C /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 245FC7E900009D6879BB913BB69D2D82 /* LOTShapeFill.m */; }; - 8E145139B894C20F2E39E16E8BB35F0C /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = CA67CFC4B5DD5D3E5C8D7FE862F30215 /* CALayer+Compat.m */; }; - 91C45BA64B15E197015D1A50010CD33E /* LOTStrokeShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C4E7E7E5B2E25ACB2BD6E6A3EDE38D /* LOTStrokeShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93002FB1FCF7E34F3A9CAA5B7F953C1F /* LOTAnimatableColorValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D4869FFC14B1BE3C9C20B5C9E01698 /* LOTAnimatableColorValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 932BD23FD0FF220462100AA003BA7AA6 /* LOTLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ED0EE10CC23DF4EEE54CA6FCE2EFDC7 /* LOTLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9895A16AAE72E184312420AB7AE8ACDE /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = E6B899FA984022ACBAC1E00F75173A50 /* LOTShapeStroke.m */; }; + 765D5074C9926363FA1B681704C262F1 /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D16B0A88C42F3A45DFCBCE2B83E73A /* LOTLayer.m */; }; + 7805BB77E9FE147929E71966CC04FB8D /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C48FF8CB94A64ED37E742B5C3086FED /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78CEDB40F064E3FF8665149AF6A42935 /* LOTLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A631F9D585137CC027709307819643B /* LOTLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A303A7FCC0217F03B0D49045ADE58A9 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7AA16770765B06D2B77345786D406D /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B43D7B683733528AC2335AF7D078F40 /* LOTRectShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = BBA3A2FF0DB7F9B4F861D9B5872428E6 /* LOTRectShapeLayer.m */; }; + 7B98585A5DE9362B03C982653560517B /* LOTMaskLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DD80E684013C492201E1FA69B0FA163C /* LOTMaskLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C9701AF0C76E11094ABAC992C0C7C5C /* LOTAnimatablePointValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 43D525DEBA25C886A81FDF7B726BA577 /* LOTAnimatablePointValue.m */; }; + 7D80A52CADD8C796F91C07F50FE8502B /* LOTGroupLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B58E65C06AA5FAE8D450C3C97D3B7A /* LOTGroupLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D95736C9221AF5633FB73E53044594E /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EEF78B0574E13E845F3AD68DB7671CB /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E992FB17CB8979EEB8E95CE2A7839EC /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 90209B8399C230E4E3B42477C0F50985 /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F4F6A03F0FF5BC54B47ED81BE8A7411 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = F134ED5A5C7C345BEDDC3564E6CB7A18 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80EE6155F5F94155C91035A32EFFE359 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 341EBA4D16E96A40B34F85AD23888058 /* LOTLayerGroup.m */; }; + 8181E8AF1D210C3A3087FFACD811C41B /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = D8EF06019D9076C6EEB83F463501D92C /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8219D218F8490A168D1D755324337B61 /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = F4BE8C929E79B1C17ED2794374349B06 /* LOTShapeStroke.m */; }; + 83002E0B6DF711DCE967F8AB8E8C6723 /* LOTLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = B168856CEDE764595AB425C4CC9EE068 /* LOTLayerView.m */; }; + 846C3BAAA8242AF239330C04F9FF5237 /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 90209B8399C230E4E3B42477C0F50985 /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8507A78029943D9AD811D73CB88C3464 /* LOTAnimatableLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B22149E837A08CE923717A44E9206F1 /* LOTAnimatableLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 85461FA55A80C0A6F10F202C5799F0BD /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = CB0E12111C5B1EBBB64754A889D30B27 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 88C0E344607D7F4A4E29B8226438EA74 /* LOTAnimatableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 144D7020F1BD068ED8C973E5097905AE /* LOTAnimatableValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89C4E86AACBF8DB541406213C75B3194 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 501AEE9E3360814DD5B45B9366E6F115 /* LOTPolystarAnimator.m */; }; + 8A48DA3B7DE051CE2050ED5305436BEA /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 296A78F539AD47B343BFE43C21E5DBAA /* LOTFillRenderer.m */; }; + 8A55C9E760F0F38F55CD1BA4061AC951 /* LOTGroupLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B58E65C06AA5FAE8D450C3C97D3B7A /* LOTGroupLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C130492F1CB78D926D411B3A17FE9E2 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = A814EA9037910E809C40A50CB02627CE /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C6ED0F5BDB88979EB7158C91CAA31EE /* lottie-ios-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C415EA7F1183D8CBF4DD450C8E917A /* lottie-ios-iOS-dummy.m */; }; + 8D40913A5995E5B357C240C22187FCD7 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 864CAB57AC2441F15CEA2F13E3ED3D6E /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8E31CEC84F64BF0B783B4071E82B6D20 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 7405DBDB8E500FB807DFB9C657855A7B /* LOTCircleAnimator.m */; }; + 8F1740A13412540A72D2DFF2A57905AA /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B75927E61568455C2B19DD83E7C1F641 /* LOTAnimationCache.m */; }; + 90852233B2794F6BD6EEF404059291F8 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4F26680896F8C695875FFECC48F415 /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 91A296720DB58A09B2321449FF95211D /* LOTGroupLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C30AAF86EA9753FC2DAE56E8906A311 /* LOTGroupLayerView.m */; }; + 9279992E9DAC0486BFE021752023AA14 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 33E989A488E426AD86A70F047EFA7662 /* LOTTransformInterpolator.m */; }; + 93817CD8DDA01E779B83400BE8033477 /* LOTAnimatableLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3C789D96D4B0A33675C6BFF14EBA1A /* LOTAnimatableLayer.m */; }; + 940543A8BC3A5177D8F66CF65E585B01 /* LOTCompositionLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = CC7C2BB575EE57203BE0FD9BFFA53497 /* LOTCompositionLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95B3411D4D9687C87979DF24FA1FF7C7 /* LOTAnimatableScaleValue.m in Sources */ = {isa = PBXBuildFile; fileRef = EECE0809A0923A6FD452BE529F7A6EC5 /* LOTAnimatableScaleValue.m */; }; + 95C6A09F62DCBA2C50ECF4076FA3D22F /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1C1DBC0E70EB8726F3CC0383B80073 /* LOTKeyframe.m */; }; + 96677C34F9C07076B602171E63D518C8 /* LOTAnimatableScaleValue.m in Sources */ = {isa = PBXBuildFile; fileRef = EECE0809A0923A6FD452BE529F7A6EC5 /* LOTAnimatableScaleValue.m */; }; + 97A33C9E3814A699D4A7D4F497EF3C98 /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FAFDA2EC2EE1832050C325881172C24 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 982647C811D75654E610C4B5805E44AC /* LOTAnimatableColorValue.m in Sources */ = {isa = PBXBuildFile; fileRef = CD5E1880A9D4AEF5D8CBFAEF7FB1E1F9 /* LOTAnimatableColorValue.m */; }; + 98BB2D16A81BF4BA7B1965D069A7FCE6 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D967F48ECE504C7D000E74AA8DB233 /* LOTAsset.m */; }; + 996F2C1E7DF9422E12DB0C06014279E3 /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = DFCEA9355A28F04AF74A8CA27F76AB87 /* NSValue+Compat.m */; }; + 9A1B1B2C50BE8265D81AE82DA1E3FD19 /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6783C9F2F59B08ECB7AC6FADC31357A0 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9AD759BE2DF752D7A4F32F78837E2057 /* LOTAnimatableBoundsValue.m in Sources */ = {isa = PBXBuildFile; fileRef = FF9466C2CE362E7F670BEA870AEEC29A /* LOTAnimatableBoundsValue.m */; }; + 9BD056D38E61E50CA77702D90E73694A /* LOTRectInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C95BB9E40A9A21F4E352844B519F91A /* LOTRectInterpolator.m */; }; + 9CC9A99330E4D53C21100256E0C0993F /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 388024020FC28E589F205A89434EEE95 /* LOTShapeStar.m */; }; + 9CDCFEA637CE5EE2DD917F72F707AFF5 /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = B2F443FBC6741B221175CA34596BEFF0 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9E52F4F7D4588D34FC4EAAF7B00E2724 /* Pods-lottie-ios_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D026EFE442CC845F08509D94D1DC02D /* Pods-lottie-ios_Tests-dummy.m */; }; - A024240193F3B2D116B8418C879D806F /* LOTAnimatableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = B13317054964823CCCBD113DC0EA8B4E /* LOTAnimatableValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A060B1E8572EB3C4A45E936B2C232490 /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D467970A714314E2B75E0E5425CDBD /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A18245315476E21AEC41BEE555932734 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = C90C311450EC6DC84E23C510D63B960F /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3242B22DFA7F8C3B57CCAFA311C8B5D /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6F1FDABFE7BA46F4C335C355203BD6 /* CAAnimationGroup+LOTAnimatableGroup.m */; }; - A3B0E8880A7A283A62D745BA0B445350 /* CADisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A2687B9A783F5CC62C643EB4EA5525 /* CADisplayLink.m */; }; - A85F77090E5C021014481583E31FABAF /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2051C729510DCE034CE5D49CB453D6CF /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A92A016B70A42200091761460C83691D /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF25D6B425C44665A0F8F7355AF7F22 /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A96D7B03F5CD6FAB227B7A28B1477B2A /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF25D6B425C44665A0F8F7355AF7F22 /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AA51053B092DA39EB814D8E428D8D9ED /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = CA67CFC4B5DD5D3E5C8D7FE862F30215 /* CALayer+Compat.m */; }; - AA9AEF04B160B68CE2EF21051FA5B73D /* LOTAnimatableBoundsValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E677FA9492A8C0F8CF594651DE45ECA /* LOTAnimatableBoundsValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AAC4E7F14B261127A53AF42AC747E66E /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D439B1F575EABDDFD4050A2019CFE7A /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB89E5F56D950FADCBCEEDC447E2912D /* LOTAnimatableNumberValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 37A3DEC75ECC68471C6A89366BC6CF86 /* LOTAnimatableNumberValue.m */; }; - ABA41BEBB6BFD056816073143938843A /* lottie-ios-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B7EB62E6422B6FC6089CDCDC79BAC8B /* lottie-ios-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC8E8C240C9923BA68B34181E3DA0F4E /* LOTEllipseShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD3A7C74DF81C37C079DE2EFDBFDCD6 /* LOTEllipseShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACCF93014A837F4EF52C8272E6B62111 /* LOTAnimatableLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 39EED9104A47BEAEF0F430C1FF4CCBD8 /* LOTAnimatableLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE29F7571F5560DD0851A80DB1E3A46C /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = C879D49ED5AFA937A0172507B1F454BD /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B097614927B93BD972890236987C8B5E /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = A88D3C5B2CC70AEE302858512F95C8D0 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1C8689934816DE75C304B29D4534A7C /* LOTShapeLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D995D53F86B98BB22E03B39A29B515 /* LOTShapeLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B27312E7F26EDF9988F5B1A42F1069B0 /* CADisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A2687B9A783F5CC62C643EB4EA5525 /* CADisplayLink.m */; }; - B2ED5EA8B978D595699CBFB605699041 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */; }; - B30AC34CC64ABFB82481BC632DC65EF3 /* LOTGroupLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 57DC28EC5873B72A9C2B9CF1CE17D042 /* LOTGroupLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E68EB13B84BEF2301C3A78078C952E6 /* LOTAnimatableColorValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CE6E29CA535D5519BD6F9F9B13A3A4D /* LOTAnimatableColorValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EAB70B4C54447780D0C08CA06850C67 /* LOTMaskLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DD80E684013C492201E1FA69B0FA163C /* LOTMaskLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FC234950B0C67864B29B08FE5CA627F /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = B5373820252BAF7D1D6DC04D4A803B85 /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FF441081A60EF526F5C33F467947B74 /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = B5466FB41481AE4C1D2D3B41094ED320 /* LOTBezierPath.m */; }; + A0DA32D87D19A22CA995D9034345A7C0 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A813F7ADF83DB801E58EA8E406F8C0E /* LOTShapeGroup.m */; }; + A0EB3004EDA1415CE464B212F9CFD421 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 341EBA4D16E96A40B34F85AD23888058 /* LOTLayerGroup.m */; }; + A14ABD3667D5188383255171622740BE /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B037A4CD134F5DC66F89C0BB553A896 /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A27B34B64D8DD664CBEA852CF581588E /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E40CC0519F709CE03F4930918662625 /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A46AFC79371EBC669640400DE2EA788A /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0703E815A6AB49F6DE0FE6F68D065013 /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A4822D3D61C8A09B0EFA5456C3BBCD20 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AF95F1D74D03D7B26241C2B1266A826 /* LOTSizeInterpolator.m */; }; + A4B2F4F9C9BBCFCE7B52B2136C6EF738 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D0CB70031569DEA955CBA27C740E901 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A4E1A498ACA6DEC0C4F6817FB099CA9D /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5792012DF7DDB09830FB0C73AB2D05CB /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A502BB5CADBC332558590363C18FEDA1 /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A2D07E396EAC0B4E40CA9FAA21CE962 /* LOTStrokeShapeLayer.m */; }; + A5E14312238E2EE5C96A1B6DD844EEB9 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D0CB70031569DEA955CBA27C740E901 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5EF11D0711FF8D377740156CB957BE0 /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3856C8C99ED844926DFDE2F961890955 /* LOTPointInterpolator.m */; }; + A605AA7ACC0CF38633D251B86731CAD5 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = 89190F0545464BBA9E3077016A4C90A1 /* LOTComposition.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A6F86852D058121992AF602A3368C371 /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4282CB94480ABCBE6A70C9B60B19C05F /* CALayer+Compat.m */; }; + A763BB00A1CEC68C45F1D39D7D0593FB /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = DF4D56F89FE7578F292439887CB294E3 /* LOTMask.m */; }; + A885AD4124E79A6E702F8F0D05E03BE7 /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = DF4D56F89FE7578F292439887CB294E3 /* LOTMask.m */; }; + A887ECC5961C305A8DD5D480B3418F78 /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = EF218CD3EAEB2D0BA035E5FC225B1FC8 /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AAA8F43E56E5158CD59C3B56654EE67E /* LOTAnimatableBoundsValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8223CC17B3077CCB25A39BEF25012AE1 /* LOTAnimatableBoundsValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AAE918B2A747B5051D1CC0C86266A887 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 33E989A488E426AD86A70F047EFA7662 /* LOTTransformInterpolator.m */; }; + ABC72214ECF3974AF12735A4329206F7 /* LOTShapeLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D9AF86F883FCECA2AE47C933BE72E6 /* LOTShapeLayerView.m */; }; + AC642A4FCFD170F4262C45178F8F841D /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = F134ED5A5C7C345BEDDC3564E6CB7A18 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACA2800857E0A2A560EAE9EDB4F6E43B /* CADisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = C45E9D3E14D71A060EAB1CF9A375F201 /* CADisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD38EC0BA051034386155C7DF01C82E7 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A59AB198589E310CD3BC625A37EC349 /* LOTGradientFillRender.m */; }; + AE15FD0D67437DA83A8E301C8B7151B3 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 69B2030F2D768F96895BF34166D45CBD /* LOTPathInterpolator.m */; }; + B0553CD266848DDB09A5BD74E0C8C769 /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F46A835F009EAD5B465E106483FBEBAA /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B089FBF5EAECEB8BB8B2DF5D766630C8 /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = BD8F152A1D1F152CE88E44E4D6BBEE00 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0D1722CBC46068C053C4699B9A37098 /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4282CB94480ABCBE6A70C9B60B19C05F /* CALayer+Compat.m */; }; + B102DEA84908EA842534A74EC79613C0 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = 3579F4133852B1738DBB86C24F23C08D /* UIColor+Expanded.m */; }; + B132389B22FD2F95AF18628D1411789E /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5CAADAEE057607227764A408B3A2AB /* CGGeometry+LOTAdditions.m */; }; + B16F75126392DFD319B9D0FA951318E4 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = BA0DBDCF88E584AE2EC0B6B38D8C0999 /* LOTShapeCircle.m */; }; + B2546FD3BCAB7490562602837C14528F /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B720945BE745838340B12DAE2DACE7D /* LOTLayerContainer.m */; }; + B283935B6B1B7997D907DE0E79AA7502 /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = DCACDE3182C346B0BC0D8388F899D9FA /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; B3CFE17627AD96132E88A45FBD85C4E4 /* Pods-Lottie-Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A9928BB42BD4378E9784E817BB6524C /* Pods-Lottie-Example-dummy.m */; }; - B5834C885C78105EAFB41B4F25F89198 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = A21DBF047863956DFA410BAEE3E42C1B /* UIColor+Expanded.m */; }; - B690C18B48E7A1FAD169DBB6344165E6 /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7B4D50F58BACFCE82F837CFC0E0B1E /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B3E3AE44D058B984551C6526D3FC6FBF /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0703E815A6AB49F6DE0FE6F68D065013 /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B455A445D007D25ACE59F2A1CFF3AE23 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 16DCB018FFB84697F1C2C76B848120AF /* LOTColorInterpolator.m */; }; + B6C6D7403860CBA1BB107BDCD418D86F /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = A814EA9037910E809C40A50CB02627CE /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7BC95263EB29B7A9B8978E5015C5A38 /* LOTAnimatableScaleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = EA810243EBC8D6BD1B79599FCE41C4C7 /* LOTAnimatableScaleValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B855044D86DF4405CD6DFCB83B9B1D0E /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5CAADAEE057607227764A408B3A2AB /* CGGeometry+LOTAdditions.m */; }; B8BCA47B1A77DF95917998D9085EFAA9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; - B8DD47F763F17AC3EEBC8C524C8071E4 /* LOTAnimatableShapeValue.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C6E91956838B1D9712FFE89A954CDC /* LOTAnimatableShapeValue.m */; }; - B92364BBEB17FA96D2F63AB7FB0AA80F /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B34B557DAB322300CFBB55DAA449B4 /* LOTShapeTrimPath.m */; }; - BB0F55CF329E0FBF2CB523C1FCC06CF3 /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = D144F43B992D0FC2E3FA0E8F347235FC /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD65A5B3F0F88705D2510F48A5B6A266 /* LOTEllipseShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD3A7C74DF81C37C079DE2EFDBFDCD6 /* LOTEllipseShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BEB4C0D3644B65EBBCD21284D1ACB1A7 /* LOTRectShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = A4377674E676A5649E73DB44A3AE4EAE /* LOTRectShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C29E25B80A96ACA26CCE93673192ABC2 /* LOTAnimatableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = B13317054964823CCCBD113DC0EA8B4E /* LOTAnimatableValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2C5C70AE17E4B478F15222AF2E874AA /* LOTAnimatableLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3865FADCCADCC789674635969A6D45AD /* LOTAnimatableLayer.m */; }; - C32E6428C8E7196537B4713BF6598EFB /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D439B1F575EABDDFD4050A2019CFE7A /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4BD6BAAA21843AB358913AA89713359 /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = C879D49ED5AFA937A0172507B1F454BD /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4C2F19FF9C5DE298DD84E5A428D7698 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = DB02D4064CB782A2B964B46467FC9883 /* LOTAnimationView.m */; }; - C52DD252E40E711591971743588BD38E /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 6811434B3DAB7754101483A530405466 /* LOTShapePath.m */; }; - C5417A90C0FCB35821128AB8BFFB06B5 /* LOTCompositionLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 62D10B08778FD7C95EF48165655F8766 /* LOTCompositionLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5C25B48916F7BFFBC0B73C6EEF96608 /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8698F0871C3DF54D5ED95C86B908DC10 /* LOTStrokeShapeLayer.m */; }; - C60676E5E8A0776E49069A1F70D7D2AD /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = DB02D4064CB782A2B964B46467FC9883 /* LOTAnimationView.m */; }; - C7A99EF52664EE8AC33A713A72264A62 /* LOTRectShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = A4377674E676A5649E73DB44A3AE4EAE /* LOTRectShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C9EFD5C7F873A8316D9B2892BE38C878 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EC75FDDFFB52B4ED42E4358DC422BB /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CB2187A2B993E225FF910904155699C8 /* LOTLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CFD56EA32C4E280C127079F4FB7A509 /* LOTLayerView.m */; }; - CF4A52F8F586302659DC0574DAD7415A /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 135366D2D175D55F9BAA7638528E2658 /* NSValue+Compat.m */; }; - CFA2199B9C373C9AD53086E40A8896A1 /* LOTShapeLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D995D53F86B98BB22E03B39A29B515 /* LOTShapeLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CFBD241815973AD097E6297D52DD0496 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5407A58FD4D852D55BBE6B75176EF5DC /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2BD8F4BB91D28EAEBDEA55C480B6539 /* LOTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB90BAB8F6CA800171B1FA971BC8F51 /* LOTMaskLayer.m */; }; - D3231EFA8EAB066FB606EA8C677AEE61 /* LOTRectShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 501BB506A518EBF1C596EB2E412F90F4 /* LOTRectShapeLayer.m */; }; - D680D594D6D19833563BDA31588BD970 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D60D8B243F07BFF1F4037F70108FD8F /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6C98639C9E00A3822AE350D4EDE2D73 /* LOTEllipseShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 116280A338E6B12358C68FFD8BE4CDE0 /* LOTEllipseShapeLayer.m */; }; - DA08A39D886FA2A868996E198BB0C970 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */; }; - DB2EE5D0A86B85CA39232C77FBD7D456 /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = F080B2BBDEBC22A95A2703D948A9F160 /* UIColor.m */; }; - DB3B48F0A33001AD65B5FCD0B2F0BE26 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FD2ED630D49F082C9313D66CE641990 /* LOTLayerGroup.m */; }; - DB3D8590C5A7A6DAE41D1BA51479FB46 /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = ABC798B7199E43A9FFAB300F4B8014F9 /* LOTComposition.m */; }; - DDCBBFB6FDDF57ADF4D7F33FB1615619 /* LOTAnimatablePointValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3B3E78F9D14443E9EF3374C64E36C2 /* LOTAnimatablePointValue.m */; }; - DF950CF66F9483D7D1B147A7871358D6 /* lottie-ios-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FF09253EB0B902C0017CD74BABB9FF52 /* lottie-ios-iOS-dummy.m */; }; - DFA4EF49840297EADEAFC6A239E4675F /* UIBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC039FBA91E0B14F446E8591909284B /* UIBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E21B097C2B266976BEF80D5BE101D122 /* LOTAnimatableScaleValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F5F4F48B33DAF7D030B1474E5F3223 /* LOTAnimatableScaleValue.m */; }; - E3DB9058B883A09E9670E04267466E2F /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = F6B56016B1B4AE46FD01AA5A099CD6F7 /* LOTComposition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6022702EF664A74A4A6ECF3F8FEBCDD /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 58C8E12079AAF4734658684503009718 /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E69143ABDD76A4907A3D78D051BC875A /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = D144F43B992D0FC2E3FA0E8F347235FC /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E70087B04DE7E4B0C77033044BEBC4D9 /* LOTAnimatableBoundsValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CF51B50C6B7972E0415722CB41EE05 /* LOTAnimatableBoundsValue.m */; }; - E9802C36356169B91AC552F501452493 /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E557697A150EC866389A6FE90663F36 /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B9366E6FD604B869170E80178624A568 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C360BBF96FFD291D8FA8045AD64EC9B /* LOTAnimatorNode.m */; }; + BA48C0E2BE1B4204A258B0FD109E6002 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = C1417915592C03D37ED8C6502580A38B /* LOTRenderNode.m */; }; + BB794B47D6867C7C482C8841C817ADFD /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11BD7658407F741C44DB768EDCB40C01 /* LOTAnimationTransitionController.m */; }; + BBB041289FB3E4FB3E7BDE3F4D5A7FB0 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = 3579F4133852B1738DBB86C24F23C08D /* UIColor+Expanded.m */; }; + BBC02ADCC36811A40E88FB810385C154 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE22E44E0D473D26B9E644895267DA8 /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BBD5328DEAD1884DF9A8EFDDF8A92433 /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B75927E61568455C2B19DD83E7C1F641 /* LOTAnimationCache.m */; }; + BE78E92F9B150CF5DBC210F79E21DF2F /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = A426B57B24F902D565A50CCD92E93E58 /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BF34096AD979C735443AE51A70092DE0 /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E6348AA26B1DB92CA85E7D6E538CE26F /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFC3E907E8F2EA534403B45F7160914C /* LOTShapeLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C8E35631C13FDF8C6A374E2DA57C0A0 /* LOTShapeLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C12D4CAE7958C9C0B5070D2DD561A845 /* UIBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BE932BE826615EE168F3067495B9FB /* UIBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C24960CCB17800ADE5D01B5C97B24FF4 /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E4BF2FF4C5A3F3C7B74A46AD379DB47 /* LOTShapeFill.m */; }; + C3321A35352E4E2F4E6C38AED370B973 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B270CF5888342399A2CCD5C586C161 /* CAAnimationGroup+LOTAnimatableGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C366090D6C389DF3D1ADEBB14371452C /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D565BCD46DF53304253F2C6DF7B7EDF /* LOTValueInterpolator.m */; }; + C3C4B197255276AC3CEA5DAA33A23DD4 /* LOTAnimatableNumberValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7E3118109CF8B7DD0F99B2E923D3B6 /* LOTAnimatableNumberValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C66C67C3F6C2EF798C67D20BEE225BBF /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 674ED4B84410CEC4438324FCED634104 /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C79D1DC6657A7D2C5E1D0D79DA4C907C /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AF95F1D74D03D7B26241C2B1266A826 /* LOTSizeInterpolator.m */; }; + C79E55630F9044CF1C8EF01805D2A16B /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A59AB198589E310CD3BC625A37EC349 /* LOTGradientFillRender.m */; }; + C7D53C6D1CE442FC00397C6001016ED0 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4F26680896F8C695875FFECC48F415 /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C89685FF0607903273D4AF3832C981EF /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 3580FD31FA8AF696C1AF05B772A803CA /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB4752F62DFDB69108F4D68B81F465BB /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D1FD2DA1AD70E052254D75D8BCCC3F7 /* LOTComposition.m */; }; + CC36F9B9C8C3903676C4EAEBFD014413 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */; }; + CC8D80FFEC5B07C92BCCBD36A4CBAAE5 /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 1420D2A58C8D413E49BABE36F8F18127 /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CCFF968E209FCD1A38A87070B0D55A27 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 328AB4D5DAD92812B1872E059EEBE723 /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD34418A1A43919FBE2828F9BF883877 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA2D1FDF82BEBD6CFEA688AB7665DC0 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD6BB4C6C6ED798A4D40017A1EFFFF89 /* LOTEllipseShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C0788335ADFE1D57ECC80FDE8696CB /* LOTEllipseShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF7C0363EA545D52B7C6AC720116A396 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D8F2ABDEE048AF63C15AAAFB7393526 /* LOTMaskContainer.m */; }; + CF99297D94D1853C908DDBA72A430FCF /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EF95CCB8166AC042A5DE7DEA292F908 /* LOTStrokeRenderer.m */; }; + CFC690D4391D6AD027A3734C51661C5A /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B270CF5888342399A2CCD5C586C161 /* CAAnimationGroup+LOTAnimatableGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D019FC221D274293D263106EA798DA75 /* UIBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BE932BE826615EE168F3067495B9FB /* UIBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0EEBA5BAEDC37BBB678684ADB682B84 /* CADisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 97194F258F84546499008120D1B31065 /* CADisplayLink.m */; }; + D318F1B5F5DC22C7DCA4851671E5DA0E /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9540149A0E41F9B4BEB62BE4113555 /* LOTRoundedRectAnimator.m */; }; + D3222B4F1C796A1ED42BB5C09A094210 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 16DCB018FFB84697F1C2C76B848120AF /* LOTColorInterpolator.m */; }; + D540E4FB2B7761738E077968F59BC941 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 328AB4D5DAD92812B1872E059EEBE723 /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D67C110EC72BE1073C0FDD88D543CFA2 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 25D72A954C42B01E2A3DEBD7AF636F16 /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D80B3FCCE88EBCFFABBB9D2FE6D1BB4F /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = C29D693FABA3C811A0FC935937BB3E0B /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D893DE63B1CAD5325C47CC04D0C2F416 /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11BD7658407F741C44DB768EDCB40C01 /* LOTAnimationTransitionController.m */; }; + D9213B66B8F5C7C9070BCEF5C886E09A /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C48FF8CB94A64ED37E742B5C3086FED /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9CD49D31857D80C36989DAEB6A4E2BC /* LOTAnimatableNumberValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7E3118109CF8B7DD0F99B2E923D3B6 /* LOTAnimatableNumberValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9EDFDAC0D82F5F08BD7545666110D15 /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 326D7EFBD332985E51AD7855DDA843BE /* LOTShapePath.m */; }; + DA1D8BDD846BD1C274F8926887F32C32 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 094A2F666BB5BDABA9202EE2566B0431 /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DAECE1256E4CABAD47BA36FB4F77BEF8 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD6C4BBBA4E90ED57238F63DADC3E4B /* LOTShapeGradientFill.m */; }; + DB7B79F2DE2BE36C0AF77BF088245BC5 /* lottie-ios-OSX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D00258E4C4D882665FA7673AF9DE81C /* lottie-ios-OSX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD7C032C9739CA60EAEF7CCD8C4EDC96 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AD96C504BE13F612B1F34B4A2E69299 /* LOTShapeRepeater.m */; }; + DEED500FE5C0BC26D110F4D5899C065D /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 3580FD31FA8AF696C1AF05B772A803CA /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF0720142E53FAB34BD0B33FE6FDB27D /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE2F9A829A810DF3991EB1A84212177 /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0BD8EF2BA45DC0189D2DE67AD6DA019 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 219BBEA62320DD9F344BB4B0E7D95613 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E29FFCEC429E518BEBA4D5E81C517ED5 /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E6348AA26B1DB92CA85E7D6E538CE26F /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E3C2E08E387AD4983304AC9523CD1250 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7AA16770765B06D2B77345786D406D /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4B24295256BC54D5F651A1614E3B4AD /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = A0C988E83B337ACF752F6C9101FC6608 /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E540B01A9E77A420472ED0A47AA78B3E /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3856C8C99ED844926DFDE2F961890955 /* LOTPointInterpolator.m */; }; + E8301FAEE7C77E1C59B70FB4ED394488 /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB745A2A31503423ED6268BD7008F89 /* LOTArrayInterpolator.m */; }; + E97E5DC2989FE6ACB6EA07854DFB0E42 /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 88BDD3A36C3C66D728C2F29FB2794C71 /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; E9EC2EEDB9D1F159DF490A5FE1BF26AE /* Pods-Lottie-Example-MacOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 906B715060F9EA341552EDB58A78F404 /* Pods-Lottie-Example-MacOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EADCF40A64C4D1F8273CF423FA7E65C7 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A6B62DF1DBBB373E0B2BACF705AB122 /* LOTShapeRectangle.m */; }; - EC529EBE2C8F87185A4516A0E9E11F03 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = 19C656A498AE48F5DD283FE85E50C005 /* LOTShapeCircle.m */; }; - EC978DD494AFD18A825AE21229F65A55 /* LOTAnimatableColorValue.m in Sources */ = {isa = PBXBuildFile; fileRef = CFC75E8B2BA0F60139EB6FDA6C9B399D /* LOTAnimatableColorValue.m */; }; - EDF25CA451639F71ADB4B9529791FA33 /* LOTAnimatableScaleValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F5F4F48B33DAF7D030B1474E5F3223 /* LOTAnimatableScaleValue.m */; }; - F36785B097644D2C3F87EC8ED358119F /* LOTAnimatableColorValue.m in Sources */ = {isa = PBXBuildFile; fileRef = CFC75E8B2BA0F60139EB6FDA6C9B399D /* LOTAnimatableColorValue.m */; }; - F6D3DCAC44CEB866AD74070664710DCE /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FD2ED630D49F082C9313D66CE641990 /* LOTLayerGroup.m */; }; - F95765A052FB04968576F3D23ACA744E /* UIBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = F3209E4D9AC30E57E54489362BA4B728 /* UIBezierPath.m */; }; - FB38314EF920377433F14C6A9FED03CE /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ED0494E573973A4A8CE20BC61BD7741 /* LOTMask.m */; }; - FBF3C04F748AD7F7941057D2F048989A /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = A88D3C5B2CC70AEE302858512F95C8D0 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE97A7C90BC2A392C0A8F6C352D752FD /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7B4D50F58BACFCE82F837CFC0E0B1E /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FEB78555B80D276710395DEC44F25AA1 /* LOTAnimatablePointValue.h in Headers */ = {isa = PBXBuildFile; fileRef = A967CCA3990EA603337F2488E57F0AD9 /* LOTAnimatablePointValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EADB465AF060AC9DFD782103C0FB10D2 /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC07B2467EB02A33FAF22C75C90CC88 /* LOTNumberInterpolator.m */; }; + EBBC5C2C0BCE6D15577EFD566F4E0011 /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E865D3F6905C6C5D24D4666E66852BB /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBD3CA48EF745A3A19BBB73102F13B62 /* LOTAnimatableNumberValue.m in Sources */ = {isa = PBXBuildFile; fileRef = FE66595595D6EFC9940ED68A7F0CB95D /* LOTAnimatableNumberValue.m */; }; + EC81C1A8B51C2EE3C25A2CE3D5EBA807 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7515071DDB6440F570FAD195780ED /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE78E424DCF68133082A5C9AEF327941 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 864CAB57AC2441F15CEA2F13E3ED3D6E /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEAA4D06DAD0497060866E62E3DCD982 /* CADisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = C45E9D3E14D71A060EAB1CF9A375F201 /* CADisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEC7AEC4F97AC707312CE20BCD3EE60C /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3445372404148934206C8AD88C866A6E /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFD4F4A85830AC8AFFBFA6916AE9544C /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = AE1AE5DB601506215E5F0DA16B9D95CF /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFECAE338D7ACD266907D2E1BB09F978 /* LOTAnimatablePointValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 41172C6EC025E76933F93D5769B2177E /* LOTAnimatablePointValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F0D6FD2C46149FF5F2B6204BBB13B8BD /* LOTAnimatableShapeValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FC4E4FE5282714187DF1A0B77A3A941 /* LOTAnimatableShapeValue.m */; }; + F42B0DB38FFB2E86878F27A5843B2B1A /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = EF218CD3EAEB2D0BA035E5FC225B1FC8 /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5800EC46A46BE442CC66E788371F70E /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E844D49ECF9A50C37531AB79BACCCDD /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F82E769FA2200B729EE54456920CD75A /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5181E6B39A20B38D9B4E34EE983361EF /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F91906FAC0BE2ABB3D91EF0A7FF3957C /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E865D3F6905C6C5D24D4666E66852BB /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F97C98621B35A0EB04F1792226429CEB /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E40CC0519F709CE03F4930918662625 /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB72C9DF1B6F9FEE7A51DA20E76F747B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */; }; + FB791F68428A861FC183555B39C8B805 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = C1417915592C03D37ED8C6502580A38B /* LOTRenderNode.m */; }; + FC54F6F0F4F34F0C6A6F8C5D645E2C0C /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1F1F8F670D2EB6EAFEBD673C338ACC /* LOTPathAnimator.m */; }; + FD4D556664E89BECDC228B13F421DFCA /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6783C9F2F59B08ECB7AC6FADC31357A0 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD755E13EAF481CB4687EC7532409035 /* LOTShapeLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C8E35631C13FDF8C6A374E2DA57C0A0 /* LOTShapeLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDEF60B591C8642B2427AC4B818B11A6 /* LOTLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = B168856CEDE764595AB425C4CC9EE068 /* LOTLayerView.m */; }; + FE10118AE8AE825316D930E7C80120C6 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A11DF77F3716538B028EB899339EEA2 /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FEAA7367521F6EAC74EB9F31DDEC1E2A /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = E611F5226F9E156701013E03E5DF7933 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF419F9CF364AD2819C2469C989197A9 /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB745A2A31503423ED6268BD7008F89 /* LOTArrayInterpolator.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -206,159 +330,221 @@ isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = B35FB2D3A4FFEC4F1B73BD07D0422650; + remoteGlobalIDString = D421BDA10EC5F10FD74217C3532136BB; remoteInfo = "lottie-ios-OSX"; }; 68E1DE604219B922CE07CE2003EA0EA3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 67E1D3D063C8D633198AFE4F109B57BE; + remoteGlobalIDString = 3D260FCD19802BD64B1073C14F2893F9; remoteInfo = "lottie-ios-iOS"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0508D1F4EB475E8EA9FD7082C7562045 /* lottie-ios-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "lottie-ios-iOS-umbrella.h"; path = "../lottie-ios-iOS/lottie-ios-iOS-umbrella.h"; sourceTree = ""; }; + 0552670BA1CEE193554BAA92420F7D04 /* LOTAnimatableShapeValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableShapeValue.h; sourceTree = ""; }; 066BD868B309BB71008F48B50699E933 /* Pods-lottie-ios_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-lottie-ios_Tests.release.xcconfig"; sourceTree = ""; }; - 07A2687B9A783F5CC62C643EB4EA5525 /* CADisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CADisplayLink.m; sourceTree = ""; }; - 07B34B557DAB322300CFBB55DAA449B4 /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTrimPath.m; sourceTree = ""; }; - 086D453C029FEA4E5D07A0CF42F5EAE9 /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerGroup.h; sourceTree = ""; }; - 09D4869FFC14B1BE3C9C20B5C9E01698 /* LOTAnimatableColorValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableColorValue.h; sourceTree = ""; }; - 0A96091EB00499090690B5654D9CCF82 /* Pods_lottie_ios_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_lottie_ios_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0E557697A150EC866389A6FE90663F36 /* LOTShapeFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeFill.h; sourceTree = ""; }; - 116280A338E6B12358C68FFD8BE4CDE0 /* LOTEllipseShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTEllipseShapeLayer.m; sourceTree = ""; }; - 135366D2D175D55F9BAA7638528E2658 /* NSValue+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSValue+Compat.m"; sourceTree = ""; }; - 143FBAE486947C2718AE48A507426B54 /* lottie-ios-OSX-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-OSX-umbrella.h"; sourceTree = ""; }; + 0703E815A6AB49F6DE0FE6F68D065013 /* LOTTransformInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTransformInterpolator.h; sourceTree = ""; }; + 07D16B0A88C42F3A45DFCBCE2B83E73A /* LOTLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayer.m; sourceTree = ""; }; + 094A2F666BB5BDABA9202EE2566B0431 /* LOTRoundedRectAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRoundedRectAnimator.h; sourceTree = ""; }; + 0A96091EB00499090690B5654D9CCF82 /* Pods_lottie_ios_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_lottie_ios_Tests.framework; path = "Pods-lottie-ios_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0AF95F1D74D03D7B26241C2B1266A826 /* LOTSizeInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTSizeInterpolator.m; sourceTree = ""; }; + 0C8E35631C13FDF8C6A374E2DA57C0A0 /* LOTShapeLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeLayerView.h; sourceTree = ""; }; + 0CC07B2467EB02A33FAF22C75C90CC88 /* LOTNumberInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTNumberInterpolator.m; sourceTree = ""; }; + 0D0CB70031569DEA955CBA27C740E901 /* LOTPlatformCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPlatformCompat.h; sourceTree = ""; }; + 0E40CC0519F709CE03F4930918662625 /* LOTFillRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTFillRenderer.h; sourceTree = ""; }; + 0F140E4F97B741FBE92D6D3B091F5284 /* LOTPathInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathInterpolator.h; sourceTree = ""; }; + 0FAFDA2EC2EE1832050C325881172C24 /* LOTShapeRectangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRectangle.h; sourceTree = ""; }; + 11BD7658407F741C44DB768EDCB40C01 /* LOTAnimationTransitionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationTransitionController.m; sourceTree = ""; }; + 12BEA1C09A4450FD89F07B65C4CC0936 /* LOTRectInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRectInterpolator.h; sourceTree = ""; }; + 1420D2A58C8D413E49BABE36F8F18127 /* LOTShapeFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeFill.h; sourceTree = ""; }; + 144D7020F1BD068ED8C973E5097905AE /* LOTAnimatableValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableValue.h; sourceTree = ""; }; 14ADE27E32C54F0871A81FF10F12F0B2 /* Pods-Lottie-Example-MacOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Example-MacOS-resources.sh"; sourceTree = ""; }; - 15F3855A2E3FB1A31C7B255C02416A0D /* LOTAssetGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAssetGroup.h; sourceTree = ""; }; + 16DCB018FFB84697F1C2C76B848120AF /* LOTColorInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTColorInterpolator.m; sourceTree = ""; }; + 17C0788335ADFE1D57ECC80FDE8696CB /* LOTEllipseShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTEllipseShapeLayer.h; sourceTree = ""; }; + 17E642B97A89EABF6D7259848C8AADE7 /* LOTTrimPathNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTrimPathNode.h; sourceTree = ""; }; 186BC3637E1E79D94ACCDCC95E358139 /* Pods-Lottie-Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Example-frameworks.sh"; sourceTree = ""; }; - 19C656A498AE48F5DD283FE85E50C005 /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeCircle.m; sourceTree = ""; }; - 1CFEB0E1C0C1055A3411B98D51161788 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1A4F26680896F8C695875FFECC48F415 /* LOTModels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTModels.h; sourceTree = ""; }; + 1A631F9D585137CC027709307819643B /* LOTLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerView.h; sourceTree = ""; }; + 1AD96C504BE13F612B1F34B4A2E69299 /* LOTShapeRepeater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRepeater.m; sourceTree = ""; }; + 1C48FF8CB94A64ED37E742B5C3086FED /* LOTBezierData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierData.h; sourceTree = ""; }; 1D026EFE442CC845F08509D94D1DC02D /* Pods-lottie-ios_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-lottie-ios_Tests-dummy.m"; sourceTree = ""; }; - 1D08AFCE3A77543E1ACC022CE32E8CB2 /* LOTAssetGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAssetGroup.m; sourceTree = ""; }; - 2051C729510DCE034CE5D49CB453D6CF /* UIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIColor.h; sourceTree = ""; }; - 2245129E598EB9DC78D8E5E981507C52 /* lottie-ios-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "lottie-ios-iOS.xcconfig"; path = "../lottie-ios-iOS/lottie-ios-iOS.xcconfig"; sourceTree = ""; }; - 2291D10156924ED8ACF668F742BA4EFA /* CADisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CADisplayLink.h; sourceTree = ""; }; - 245FC7E900009D6879BB913BB69D2D82 /* LOTShapeFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeFill.m; sourceTree = ""; }; - 24787644A116CDE813D8A8BA713028BE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../lottie-ios-iOS/Info.plist"; sourceTree = ""; }; + 1D8F2ABDEE048AF63C15AAAFB7393526 /* LOTMaskContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskContainer.m; sourceTree = ""; }; + 219BBEA62320DD9F344BB4B0E7D95613 /* LOTSizeInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTSizeInterpolator.h; sourceTree = ""; }; + 23289CF2CB9CCDE468ABF8D7040AB9F7 /* lottie-ios-OSX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-OSX-prefix.pch"; sourceTree = ""; }; + 25D72A954C42B01E2A3DEBD7AF636F16 /* LOTAssetGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAssetGroup.h; sourceTree = ""; }; + 25E8BB410932122E05451F34B19D2760 /* LOTStrokeShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeShapeLayer.h; sourceTree = ""; }; 26C7DE5BE1E84A1527B5D5FFB1789349 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 27D467970A714314E2B75E0E5425CDBD /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAsset.h; sourceTree = ""; }; - 283CCF83DE08CC09D1A75FFDC1E80AC2 /* lottie-ios-OSX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios-OSX.xcconfig"; sourceTree = ""; }; - 2854B9A9C5594BC655C1F2A2F9B3FF9A /* LOTLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayer.h; sourceTree = ""; }; + 296A78F539AD47B343BFE43C21E5DBAA /* LOTFillRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTFillRenderer.m; sourceTree = ""; }; 2A0CC55D11A791A4361B86F63BE68CB7 /* Pods-lottie-ios_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-lottie-ios_Tests-umbrella.h"; sourceTree = ""; }; - 2CA0CDC65069F76EC463C7BF822D8F81 /* LOTAnimationTransitionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationTransitionController.m; sourceTree = ""; }; - 2D439B1F575EABDDFD4050A2019CFE7A /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CALayer+Compat.h"; sourceTree = ""; }; - 2D9E8CEEDDE48C9C1DB72357B3C719FA /* LOTShapeTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTransform.m; sourceTree = ""; }; + 2C30AAF86EA9753FC2DAE56E8906A311 /* LOTGroupLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGroupLayerView.m; sourceTree = ""; }; 2E7978B0FE4ABEF65AB16645DB333515 /* Pods-Lottie-Example-MacOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Example-MacOS.debug.xcconfig"; sourceTree = ""; }; - 2ED0EE10CC23DF4EEE54CA6FCE2EFDC7 /* LOTLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerView.h; sourceTree = ""; }; - 2F45FF19B69DCCD5C9D90CD1DCD8E196 /* LOTAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAsset.m; sourceTree = ""; }; - 34AAD18AF1E8ADA45067CCF6637357FC /* Lottie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Lottie.h; sourceTree = ""; }; - 37A3DEC75ECC68471C6A89366BC6CF86 /* LOTAnimatableNumberValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableNumberValue.m; sourceTree = ""; }; - 3865FADCCADCC789674635969A6D45AD /* LOTAnimatableLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableLayer.m; sourceTree = ""; }; - 38B1EFB75C34BAD5A5CA0B1864428B42 /* Pods_Lottie_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Lottie_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 39945EB608BBD749FA4F5C044342CFE7 /* lottie-ios-OSX.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "lottie-ios-OSX.modulemap"; sourceTree = ""; }; - 39EED9104A47BEAEF0F430C1FF4CCBD8 /* LOTAnimatableLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableLayer.h; sourceTree = ""; }; - 3A6B62DF1DBBB373E0B2BACF705AB122 /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRectangle.m; sourceTree = ""; }; - 3ED39BAEA78A76BB031647F4E01D9689 /* Pods-Lottie-Example-MacOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Lottie-Example-MacOS.modulemap"; sourceTree = ""; }; - 3FC6C122778B882931A442F9B6AAE024 /* lottie-ios-OSX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-OSX-prefix.pch"; sourceTree = ""; }; - 47CF51B50C6B7972E0415722CB41EE05 /* LOTAnimatableBoundsValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableBoundsValue.m; sourceTree = ""; }; + 318636ED189D69AAE648762B88DF8C4E /* LOTShapeTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTransform.m; sourceTree = ""; }; + 326D7EFBD332985E51AD7855DDA843BE /* LOTShapePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapePath.m; sourceTree = ""; }; + 328AB4D5DAD92812B1872E059EEBE723 /* LOTValueInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTValueInterpolator.h; sourceTree = ""; }; + 33E989A488E426AD86A70F047EFA7662 /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTransformInterpolator.m; sourceTree = ""; }; + 341EBA4D16E96A40B34F85AD23888058 /* LOTLayerGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerGroup.m; sourceTree = ""; }; + 3445372404148934206C8AD88C866A6E /* LOTAnimatorNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatorNode.h; sourceTree = ""; }; + 3579F4133852B1738DBB86C24F23C08D /* UIColor+Expanded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = ""; }; + 3580FD31FA8AF696C1AF05B772A803CA /* LOTShapeRepeater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRepeater.h; sourceTree = ""; }; + 3856C8C99ED844926DFDE2F961890955 /* LOTPointInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPointInterpolator.m; sourceTree = ""; }; + 388024020FC28E589F205A89434EEE95 /* LOTShapeStar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStar.m; sourceTree = ""; }; + 38B1EFB75C34BAD5A5CA0B1864428B42 /* Pods_Lottie_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Lottie_Example.framework; path = "Pods-Lottie-Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A59AB198589E310CD3BC625A37EC349 /* LOTGradientFillRender.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGradientFillRender.m; sourceTree = ""; }; + 3A813F7ADF83DB801E58EA8E406F8C0E /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGroup.m; sourceTree = ""; }; + 3C95BB9E40A9A21F4E352844B519F91A /* LOTRectInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRectInterpolator.m; sourceTree = ""; }; + 3E844D49ECF9A50C37531AB79BACCCDD /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIColor+Expanded.h"; sourceTree = ""; }; + 3E865D3F6905C6C5D24D4666E66852BB /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CALayer+Compat.h"; sourceTree = ""; }; + 3ED39BAEA78A76BB031647F4E01D9689 /* Pods-Lottie-Example-MacOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Lottie-Example-MacOS.modulemap"; sourceTree = ""; }; + 3EF95CCB8166AC042A5DE7DEA292F908 /* LOTStrokeRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeRenderer.m; sourceTree = ""; }; + 3FC4E4FE5282714187DF1A0B77A3A941 /* LOTAnimatableShapeValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableShapeValue.m; sourceTree = ""; }; + 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "lottie-ios-iOS.xcconfig"; path = "../lottie-ios-iOS/lottie-ios-iOS.xcconfig"; sourceTree = ""; }; + 41172C6EC025E76933F93D5769B2177E /* LOTAnimatablePointValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatablePointValue.h; sourceTree = ""; }; + 419F1046E8EB9C2DE9FDB47AA4539CA3 /* UIBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIBezierPath.m; sourceTree = ""; }; + 4282CB94480ABCBE6A70C9B60B19C05F /* CALayer+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CALayer+Compat.m"; sourceTree = ""; }; + 43D525DEBA25C886A81FDF7B726BA577 /* LOTAnimatablePointValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatablePointValue.m; sourceTree = ""; }; + 4A2D07E396EAC0B4E40CA9FAA21CE962 /* LOTStrokeShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeShapeLayer.m; sourceTree = ""; }; 4A9928BB42BD4378E9784E817BB6524C /* Pods-Lottie-Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Lottie-Example-dummy.m"; sourceTree = ""; }; + 4AE22E44E0D473D26B9E644895267DA8 /* LOTShapePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapePath.h; sourceTree = ""; }; + 4AF177F139DE4C983CE5B58D93715AA5 /* LOTAssetGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAssetGroup.m; sourceTree = ""; }; 4EB1C51ABEB93789541905240DF926E8 /* Pods-Lottie-Example-MacOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Lottie-Example-MacOS-dummy.m"; sourceTree = ""; }; - 4FD2ED630D49F082C9313D66CE641990 /* LOTLayerGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerGroup.m; sourceTree = ""; }; - 501BB506A518EBF1C596EB2E412F90F4 /* LOTRectShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRectShapeLayer.m; sourceTree = ""; }; - 51C4E7E7E5B2E25ACB2BD6E6A3EDE38D /* LOTStrokeShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeShapeLayer.h; sourceTree = ""; }; - 52D995D53F86B98BB22E03B39A29B515 /* LOTShapeLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeLayerView.h; sourceTree = ""; }; - 5407A58FD4D852D55BBE6B75176EF5DC /* LOTShapeTrimPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTrimPath.h; sourceTree = ""; }; - 56793538DC941950DAD1411157F487D5 /* LOTAnimatableShapeValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableShapeValue.h; sourceTree = ""; }; - 5710AF0C8EE895A5CD661C97A865E9F1 /* LOTShapeLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeLayerView.m; sourceTree = ""; }; - 57DC28EC5873B72A9C2B9CF1CE17D042 /* LOTGroupLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGroupLayerView.h; sourceTree = ""; }; - 58C8E12079AAF4734658684503009718 /* LOTAnimationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView.h; sourceTree = ""; }; - 5A1DB1E8BAD6E7AFD306C8D64417AA00 /* Pods-lottie-ios_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-lottie-ios_Tests.modulemap"; sourceTree = ""; }; - 5B0F7BB6147A18AAF6611D0F19252F05 /* LOTAnimatableScaleValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableScaleValue.h; sourceTree = ""; }; - 5B243131CF5F997328F39DC9B8C5E1AA /* CAAnimationGroup+LOTAnimatableGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CAAnimationGroup+LOTAnimatableGroup.h"; sourceTree = ""; }; - 5F2FEDF4A82D7854224BDFCB4266741D /* LOTShapeCircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeCircle.h; sourceTree = ""; }; - 62D10B08778FD7C95EF48165655F8766 /* LOTCompositionLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionLayer.h; sourceTree = ""; }; + 501AEE9E3360814DD5B45B9366E6F115 /* LOTPolystarAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolystarAnimator.m; sourceTree = ""; }; + 5181E6B39A20B38D9B4E34EE983361EF /* LOTAnimationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView.h; sourceTree = ""; }; + 54C415EA7F1183D8CBF4DD450C8E917A /* lottie-ios-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "lottie-ios-iOS-dummy.m"; path = "../lottie-ios-iOS/lottie-ios-iOS-dummy.m"; sourceTree = ""; }; + 55C7515071DDB6440F570FAD195780ED /* LOTGradientFillRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGradientFillRender.h; sourceTree = ""; }; + 5792012DF7DDB09830FB0C73AB2D05CB /* LOTBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierPath.h; sourceTree = ""; }; + 57A80B376732519811B58F9B732D68E8 /* LOTMaskLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskLayer.m; sourceTree = ""; }; + 57B1FEF3178D7604EED65FA3A99A03DD /* lottie-ios-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "lottie-ios-iOS.modulemap"; path = "../lottie-ios-iOS/lottie-ios-iOS.modulemap"; sourceTree = ""; }; + 58D7E8EB20DD1B2C5D8BB8D915513D29 /* NSValue+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSValue+Compat.h"; sourceTree = ""; }; + 5A1DB1E8BAD6E7AFD306C8D64417AA00 /* Pods-lottie-ios_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-lottie-ios_Tests.modulemap"; sourceTree = ""; }; + 5B037A4CD134F5DC66F89C0BB553A896 /* LOTCircleAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCircleAnimator.h; sourceTree = ""; }; + 5CE6E29CA535D5519BD6F9F9B13A3A4D /* LOTAnimatableColorValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableColorValue.h; sourceTree = ""; }; + 60CC0BDE6346F89ADB5DB741F83E073E /* lottie-ios-OSX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-OSX-dummy.m"; sourceTree = ""; }; + 62BE932BE826615EE168F3067495B9FB /* UIBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIBezierPath.h; sourceTree = ""; }; 62E0D5D410342ABD17CE0F0D9D02C05A /* Pods-Lottie-Example-MacOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Example-MacOS-frameworks.sh"; sourceTree = ""; }; - 637635FDA11763E443BE882445C8F865 /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Internal.h; sourceTree = ""; }; + 63D30BE9BE2D1E59FF5D0BEE1D19D619 /* LOTHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTHelpers.h; sourceTree = ""; }; 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; - 64CD3138F22AD66144DBF1ACEC05718B /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationCache.m; sourceTree = ""; }; - 6811434B3DAB7754101483A530405466 /* LOTShapePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapePath.m; sourceTree = ""; }; + 65C907346244458A0AA1ED86C7784232 /* LOTColorInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTColorInterpolator.h; sourceTree = ""; }; + 674ED4B84410CEC4438324FCED634104 /* LOTStrokeRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeRenderer.h; sourceTree = ""; }; + 6783C9F2F59B08ECB7AC6FADC31357A0 /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Internal.h; sourceTree = ""; }; + 68BD4E155A46A5ACAC446D5FC4010BFB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../lottie-ios-iOS/Info.plist"; sourceTree = ""; }; 691E5DA7E296E61F6161698A496BC899 /* Pods-Lottie-Example-MacOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Example-MacOS.release.xcconfig"; sourceTree = ""; }; + 69B2030F2D768F96895BF34166D45CBD /* LOTPathInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathInterpolator.m; sourceTree = ""; }; + 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios-OSX.xcconfig"; sourceTree = ""; }; 6B5F9B4E3DAA22F8E999F14F7223385F /* Pods-lottie-ios_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-lottie-ios_Tests-resources.sh"; sourceTree = ""; }; - 6C88C9CD01610FF1CA51092B5A23A4EE /* LOTGroupLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGroupLayerView.m; sourceTree = ""; }; - 6CFD56EA32C4E280C127079F4FB7A509 /* LOTLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerView.m; sourceTree = ""; }; - 6F3B3E78F9D14443E9EF3374C64E36C2 /* LOTAnimatablePointValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatablePointValue.m; sourceTree = ""; }; - 6F7B4D50F58BACFCE82F837CFC0E0B1E /* LOTAnimationCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationCache.h; sourceTree = ""; }; - 6FB591717486019552A2EDC7CC23C5FF /* LOTModels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTModels.h; sourceTree = ""; }; + 7405DBDB8E500FB807DFB9C657855A7B /* LOTCircleAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCircleAnimator.m; sourceTree = ""; }; 7421CFD687F17710731C740FFE50CF08 /* Pods-Lottie-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Example.release.xcconfig"; sourceTree = ""; }; - 76643F10D8F856E523E3B86403ED8862 /* LOTAnimatableNumberValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableNumberValue.h; sourceTree = ""; }; + 759FE25B0ABE022202F7A1A1729E590F /* LOTAnimationView_Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Compat.h; sourceTree = ""; }; + 79CE823B01068A2EEAF747C0D9EAAD96 /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGGeometry+LOTAdditions.h"; sourceTree = ""; }; + 7A11DF77F3716538B028EB899339EEA2 /* LOTShapeCircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeCircle.h; sourceTree = ""; }; + 7B22149E837A08CE923717A44E9206F1 /* LOTAnimatableLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableLayer.h; sourceTree = ""; }; 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7E677FA9492A8C0F8CF594651DE45ECA /* LOTAnimatableBoundsValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableBoundsValue.h; sourceTree = ""; }; - 84BA71AD6D24ECBF13FA2CC24E3C3EB2 /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGroup.m; sourceTree = ""; }; - 85F5F4F48B33DAF7D030B1474E5F3223 /* LOTAnimatableScaleValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableScaleValue.m; sourceTree = ""; }; - 8698F0871C3DF54D5ED95C86B908DC10 /* LOTStrokeShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeShapeLayer.m; sourceTree = ""; }; - 881EEB4F51912FE97204770FD6BB7B91 /* LOTPlatformCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPlatformCompat.h; sourceTree = ""; }; - 882BD1ABCEEB35BB434E09E1341BED91 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Lottie.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8A2B53D7CFE2D3FE84ABAC705C3CF685 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Lottie.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8BF25D6B425C44665A0F8F7355AF7F22 /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMask.h; sourceTree = ""; }; - 8C6F1FDABFE7BA46F4C335C355203BD6 /* CAAnimationGroup+LOTAnimatableGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CAAnimationGroup+LOTAnimatableGroup.m"; sourceTree = ""; }; - 8D60D8B243F07BFF1F4037F70108FD8F /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTransform.h; sourceTree = ""; }; + 7C360BBF96FFD291D8FA8045AD64EC9B /* LOTAnimatorNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatorNode.m; sourceTree = ""; }; + 7D00258E4C4D882665FA7673AF9DE81C /* lottie-ios-OSX-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-OSX-umbrella.h"; sourceTree = ""; }; + 804BBDA063F6BE0570BCF2BE94D00E85 /* lottie-ios-OSX.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "lottie-ios-OSX.modulemap"; sourceTree = ""; }; + 8223CC17B3077CCB25A39BEF25012AE1 /* LOTAnimatableBoundsValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableBoundsValue.h; sourceTree = ""; }; + 864CAB57AC2441F15CEA2F13E3ED3D6E /* LOTArrayInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTArrayInterpolator.h; sourceTree = ""; }; + 882BD1ABCEEB35BB434E09E1341BED91 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Lottie.framework; path = "lottie-ios-OSX.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 88BDD3A36C3C66D728C2F29FB2794C71 /* LOTNumberInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTNumberInterpolator.h; sourceTree = ""; }; + 89190F0545464BBA9E3077016A4C90A1 /* LOTComposition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTComposition.h; sourceTree = ""; }; + 8A2B53D7CFE2D3FE84ABAC705C3CF685 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Lottie.framework; path = "lottie-ios-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8ABDE11857F92386508F3CBE215EEDE8 /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTrimPath.m; sourceTree = ""; }; + 8B3C789D96D4B0A33675C6BFF14EBA1A /* LOTAnimatableLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableLayer.m; sourceTree = ""; }; + 8B720945BE745838340B12DAE2DACE7D /* LOTLayerContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerContainer.m; sourceTree = ""; }; + 8D1FD2DA1AD70E052254D75D8BCCC3F7 /* LOTComposition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTComposition.m; sourceTree = ""; }; + 8D43DCCF8C1ACE74CAB533898E703C37 /* LOTBezierData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierData.m; sourceTree = ""; }; + 8D6D30F36C16285258371999FDA5FA66 /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRectangle.m; sourceTree = ""; }; + 8E4BF2FF4C5A3F3C7B74A46AD379DB47 /* LOTShapeFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeFill.m; sourceTree = ""; }; + 8EEF78B0574E13E845F3AD68DB7671CB /* LOTLayerContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerContainer.h; sourceTree = ""; }; 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - 8FB90BAB8F6CA800171B1FA971BC8F51 /* LOTMaskLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskLayer.m; sourceTree = ""; }; + 90209B8399C230E4E3B42477C0F50985 /* LOTMaskContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskContainer.h; sourceTree = ""; }; 906B715060F9EA341552EDB58A78F404 /* Pods-Lottie-Example-MacOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Lottie-Example-MacOS-umbrella.h"; sourceTree = ""; }; - 90F28D953D30A989FA29A1ABB565837A /* LOTShapeRectangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRectangle.h; sourceTree = ""; }; - 914414B96714EB914D61E0BEE2A8D6BF /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationTransitionController.h; sourceTree = ""; }; 9305388DE27FE56411AAA529995B63B3 /* Pods-lottie-ios_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-lottie-ios_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 96B69884AAD3903EDA2E34D16F0BA362 /* lottie-ios-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "lottie-ios-iOS.modulemap"; path = "../lottie-ios-iOS/lottie-ios-iOS.modulemap"; sourceTree = ""; }; - 98C88FF85E1094A3128BC98CB154A777 /* Pods-Lottie-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Lottie-Example.modulemap"; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 94A20DB0B63D081E857C1B0A169C5E94 /* LOTPathAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathAnimator.h; sourceTree = ""; }; + 97194F258F84546499008120D1B31065 /* CADisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CADisplayLink.m; sourceTree = ""; }; + 98C88FF85E1094A3128BC98CB154A777 /* Pods-Lottie-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Lottie-Example.modulemap"; sourceTree = ""; }; 99D3B5659E588C8AEE2472D2DE00DCC0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9ADF6456FCDD472C05DD54C7589DE47A /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGGeometry+LOTAdditions.h"; sourceTree = ""; }; - 9B7EB62E6422B6FC6089CDCDC79BAC8B /* lottie-ios-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "lottie-ios-iOS-umbrella.h"; path = "../lottie-ios-iOS/lottie-ios-iOS-umbrella.h"; sourceTree = ""; }; - 9CC039FBA91E0B14F446E8591909284B /* UIBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIBezierPath.h; sourceTree = ""; }; - 9ED0494E573973A4A8CE20BC61BD7741 /* LOTMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMask.m; sourceTree = ""; }; - A21DBF047863956DFA410BAEE3E42C1B /* UIColor+Expanded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = ""; }; - A4377674E676A5649E73DB44A3AE4EAE /* LOTRectShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRectShapeLayer.h; sourceTree = ""; }; + 9D565BCD46DF53304253F2C6DF7B7EDF /* LOTValueInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTValueInterpolator.m; sourceTree = ""; }; + 9D7AA16770765B06D2B77345786D406D /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationTransitionController.h; sourceTree = ""; }; + 9D7E3118109CF8B7DD0F99B2E923D3B6 /* LOTAnimatableNumberValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableNumberValue.h; sourceTree = ""; }; + 9EA2D1FDF82BEBD6CFEA688AB7665DC0 /* LOTShapeTrimPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTrimPath.h; sourceTree = ""; }; + A032173731A7ABB16873D91D5BA9EEBF /* LOTTrimPathNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTrimPathNode.m; sourceTree = ""; }; + A0C988E83B337ACF752F6C9101FC6608 /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAsset.h; sourceTree = ""; }; + A426B57B24F902D565A50CCD92E93E58 /* UIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIColor.h; sourceTree = ""; }; + A783A313156EA232996758A6B2CCEB0B /* LOTShapeStar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStar.h; sourceTree = ""; }; A7DF8965603F9BCC1A858825A49A011C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A88D3C5B2CC70AEE302858512F95C8D0 /* NSValue+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSValue+Compat.h"; sourceTree = ""; }; - A8B7943757B6273E76BA0133FF4C7DCD /* Pods_Lottie_Example_MacOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Lottie_Example_MacOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A8F6DE4263402D3A5F6C3CADDE15FDA3 /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry+LOTAdditions.m"; sourceTree = ""; }; - A967CCA3990EA603337F2488E57F0AD9 /* LOTAnimatablePointValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatablePointValue.h; sourceTree = ""; }; + A805DC88D13AB289304EB1618C1532DA /* LOTPolygonAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolygonAnimator.m; sourceTree = ""; }; + A814EA9037910E809C40A50CB02627CE /* LOTShapeStroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStroke.h; sourceTree = ""; }; + A8B7943757B6273E76BA0133FF4C7DCD /* Pods_Lottie_Example_MacOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Lottie_Example_MacOS.framework; path = "Pods-Lottie-Example-MacOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; A9D277A9571B164AC05DE2592DD336D8 /* Pods-Lottie-Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Example-resources.sh"; sourceTree = ""; }; - ABC798B7199E43A9FFAB300F4B8014F9 /* LOTComposition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTComposition.m; sourceTree = ""; }; - B13317054964823CCCBD113DC0EA8B4E /* LOTAnimatableValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableValue.h; sourceTree = ""; }; - B2B5D49E03C30CB6267C9203F209D484 /* LOTHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTHelpers.h; sourceTree = ""; }; + AC1DBBDF91449577D8F6EBEE01FFD35D /* LOTCompositionContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionContainer.m; sourceTree = ""; }; + AE1AE5DB601506215E5F0DA16B9D95CF /* LOTRenderGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderGroup.h; sourceTree = ""; }; + AE5CAADAEE057607227764A408B3A2AB /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry+LOTAdditions.m"; sourceTree = ""; }; + AEE2F9A829A810DF3991EB1A84212177 /* LOTPolygonAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolygonAnimator.h; sourceTree = ""; }; + B168856CEDE764595AB425C4CC9EE068 /* LOTLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerView.m; sourceTree = ""; }; + B2F443FBC6741B221175CA34596BEFF0 /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerGroup.h; sourceTree = ""; }; B39824F0377E4F493390169F20C1E3FC /* Pods-lottie-ios_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-lottie-ios_Tests-frameworks.sh"; sourceTree = ""; }; - B5F78C64D2ACDCA9E1704E626F92D5AD /* LOTShapePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapePath.h; sourceTree = ""; }; - B8EC75FDDFFB52B4ED42E4358DC422BB /* LOTAnimationView_Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Compat.h; sourceTree = ""; }; - B9191C9CA6BC255452FF3A1E23A8AD31 /* LOTLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayer.m; sourceTree = ""; }; - B9C926B498D73B1C3824C2B9732454E3 /* lottie-ios-OSX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-OSX-dummy.m"; sourceTree = ""; }; + B5373820252BAF7D1D6DC04D4A803B85 /* LOTPolystarAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolystarAnimator.h; sourceTree = ""; }; + B5466FB41481AE4C1D2D3B41094ED320 /* LOTBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierPath.m; sourceTree = ""; }; + B75927E61568455C2B19DD83E7C1F641 /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationCache.m; sourceTree = ""; }; + B992FB464B1C74A558428D9ACD5726C5 /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationView.m; sourceTree = ""; }; + BA0DBDCF88E584AE2EC0B6B38D8C0999 /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeCircle.m; sourceTree = ""; }; + BBA3A2FF0DB7F9B4F861D9B5872428E6 /* LOTRectShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRectShapeLayer.m; sourceTree = ""; }; BC4C4DE410D328A09496CEFDB2143DD1 /* Pods-Lottie-Example-MacOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Lottie-Example-MacOS-acknowledgements.markdown"; sourceTree = ""; }; + BCE15440B0DFC9DEEC53410CD14156D8 /* LOTRepeaterRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRepeaterRenderer.h; sourceTree = ""; }; + BCE980BBA27BAE090D28D90AA8709981 /* LOTRenderNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderNode.h; sourceTree = ""; }; + BD8F152A1D1F152CE88E44E4D6BBEE00 /* Lottie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Lottie.h; sourceTree = ""; }; + C1417915592C03D37ED8C6502580A38B /* LOTRenderNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderNode.m; sourceTree = ""; }; C1D12FF588125789C1846CB81A2CFDD1 /* Pods-Lottie-Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Lottie-Example-acknowledgements.plist"; sourceTree = ""; }; + C29D693FABA3C811A0FC935937BB3E0B /* LOTPointInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPointInterpolator.h; sourceTree = ""; }; C3B4255105642AC73947FB028D69B973 /* Pods-lottie-ios_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-lottie-ios_Tests-acknowledgements.plist"; sourceTree = ""; }; - C3C6E91956838B1D9712FFE89A954CDC /* LOTAnimatableShapeValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableShapeValue.m; sourceTree = ""; }; - C879D49ED5AFA937A0172507B1F454BD /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIColor+Expanded.h"; sourceTree = ""; }; - C90C311450EC6DC84E23C510D63B960F /* LOTShapeStroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStroke.h; sourceTree = ""; }; + C45E9D3E14D71A060EAB1CF9A375F201 /* CADisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CADisplayLink.h; sourceTree = ""; }; + C4857339627199703934116F2FC0CF09 /* LOTRectShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRectShapeLayer.h; sourceTree = ""; }; C9A0BB696DAB4D23402E4F92E8A879B0 /* Pods-Lottie-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Example.debug.xcconfig"; sourceTree = ""; }; CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - CA67CFC4B5DD5D3E5C8D7FE862F30215 /* CALayer+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CALayer+Compat.m"; sourceTree = ""; }; - CD73C7C52052CD35A0DDCBAAEBC58080 /* LOTMaskLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskLayer.h; sourceTree = ""; }; - CFC75E8B2BA0F60139EB6FDA6C9B399D /* LOTAnimatableColorValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableColorValue.m; sourceTree = ""; }; + CAD6C4BBBA4E90ED57238F63DADC3E4B /* LOTShapeGradientFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGradientFill.m; sourceTree = ""; }; + CB0E12111C5B1EBBB64754A889D30B27 /* LOTCompositionContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionContainer.h; sourceTree = ""; }; + CC7C2BB575EE57203BE0FD9BFFA53497 /* LOTCompositionLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionLayer.h; sourceTree = ""; }; + CD5E1880A9D4AEF5D8CBFAEF7FB1E1F9 /* LOTAnimatableColorValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableColorValue.m; sourceTree = ""; }; + CD9540149A0E41F9B4BEB62BE4113555 /* LOTRoundedRectAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRoundedRectAnimator.m; sourceTree = ""; }; + CDB745A2A31503423ED6268BD7008F89 /* LOTArrayInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTArrayInterpolator.m; sourceTree = ""; }; + CE1C1DBC0E70EB8726F3CC0383B80073 /* LOTKeyframe.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTKeyframe.m; sourceTree = ""; }; D01C3D077402D16057DAEA57E91EFD7D /* Pods-lottie-ios_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-lottie-ios_Tests.debug.xcconfig"; sourceTree = ""; }; - D10298087CCB7A83FB5C9FA172072C11 /* lottie-ios-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "lottie-ios-iOS-prefix.pch"; path = "../lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; sourceTree = ""; }; - D144F43B992D0FC2E3FA0E8F347235FC /* LOTShapeGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGroup.h; sourceTree = ""; }; - DB02D4064CB782A2B964B46467FC9883 /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationView.m; sourceTree = ""; }; - DBD3A7C74DF81C37C079DE2EFDBFDCD6 /* LOTEllipseShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTEllipseShapeLayer.h; sourceTree = ""; }; + D0D967F48ECE504C7D000E74AA8DB233 /* LOTAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAsset.m; sourceTree = ""; }; + D13D9E1B7535012933250907D1457AD7 /* LOTCompositionLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionLayer.m; sourceTree = ""; }; + D5D9AF86F883FCECA2AE47C933BE72E6 /* LOTShapeLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeLayerView.m; sourceTree = ""; }; + D8EF06019D9076C6EEB83F463501D92C /* LOTKeyframe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTKeyframe.h; sourceTree = ""; }; + D96056B276FEF7990D76B5332D196731 /* LOTRenderGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderGroup.m; sourceTree = ""; }; + DA1F1F8F670D2EB6EAFEBD673C338ACC /* LOTPathAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathAnimator.m; sourceTree = ""; }; + DA204F5D822B2BA0EC33E894FA33D148 /* LOTRepeaterRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRepeaterRenderer.m; sourceTree = ""; }; DC35AF8DD0BA3955397A629F2DAB90CE /* Pods-Lottie-Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Lottie-Example-acknowledgements.markdown"; sourceTree = ""; }; + DCACDE3182C346B0BC0D8388F899D9FA /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMask.h; sourceTree = ""; }; + DD80E684013C492201E1FA69B0FA163C /* LOTMaskLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskLayer.h; sourceTree = ""; }; + DE1654180F1E3D404AD74E405A8809A0 /* CAAnimationGroup+LOTAnimatableGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CAAnimationGroup+LOTAnimatableGroup.m"; sourceTree = ""; }; + DF4D56F89FE7578F292439887CB294E3 /* LOTMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMask.m; sourceTree = ""; }; DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreVideo.framework; sourceTree = DEVELOPER_DIR; }; - E6B899FA984022ACBAC1E00F75173A50 /* LOTShapeStroke.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStroke.m; sourceTree = ""; }; - E6E83A8E496CBAE5AAC3B3D9299E2AA4 /* LOTCompositionLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionLayer.m; sourceTree = ""; }; + DFCEA9355A28F04AF74A8CA27F76AB87 /* NSValue+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSValue+Compat.m"; sourceTree = ""; }; + E611F5226F9E156701013E03E5DF7933 /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTransform.h; sourceTree = ""; }; + E6348AA26B1DB92CA85E7D6E538CE26F /* LOTLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayer.h; sourceTree = ""; }; + EA810243EBC8D6BD1B79599FCE41C4C7 /* LOTAnimatableScaleValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableScaleValue.h; sourceTree = ""; }; + EAA55B722ECBCD50F62BBFB43D59B4B2 /* lottie-ios-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "lottie-ios-iOS-prefix.pch"; path = "../lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; sourceTree = ""; }; + ECFB5C58404EA5C9ACE0F9C8C4DFE7E8 /* LOTEllipseShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTEllipseShapeLayer.m; sourceTree = ""; }; + EECE0809A0923A6FD452BE529F7A6EC5 /* LOTAnimatableScaleValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableScaleValue.m; sourceTree = ""; }; + EF218CD3EAEB2D0BA035E5FC225B1FC8 /* LOTShapeGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGroup.h; sourceTree = ""; }; EF3671BEFBC2DE55C261520886C5AFC4 /* Pods-Lottie-Example-MacOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Lottie-Example-MacOS-acknowledgements.plist"; sourceTree = ""; }; - F080B2BBDEBC22A95A2703D948A9F160 /* UIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIColor.m; sourceTree = ""; }; - F3209E4D9AC30E57E54489362BA4B728 /* UIBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIBezierPath.m; sourceTree = ""; }; - F6B56016B1B4AE46FD01AA5A099CD6F7 /* LOTComposition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTComposition.h; sourceTree = ""; }; - FF09253EB0B902C0017CD74BABB9FF52 /* lottie-ios-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "lottie-ios-iOS-dummy.m"; path = "../lottie-ios-iOS/lottie-ios-iOS-dummy.m"; sourceTree = ""; }; + F134ED5A5C7C345BEDDC3564E6CB7A18 /* LOTShapeGradientFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGradientFill.h; sourceTree = ""; }; + F284632DA860D431BE72D6D7CE04C2A5 /* UIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIColor.m; sourceTree = ""; }; + F46A835F009EAD5B465E106483FBEBAA /* LOTAnimationCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationCache.h; sourceTree = ""; }; + F4BE8C929E79B1C17ED2794374349B06 /* LOTShapeStroke.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStroke.m; sourceTree = ""; }; + F5B270CF5888342399A2CCD5C586C161 /* CAAnimationGroup+LOTAnimatableGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CAAnimationGroup+LOTAnimatableGroup.h"; sourceTree = ""; }; + F9B58E65C06AA5FAE8D450C3C97D3B7A /* LOTGroupLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGroupLayerView.h; sourceTree = ""; }; + FCD61B30751008C76B625BB6423F54AC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FE66595595D6EFC9940ED68A7F0CB95D /* LOTAnimatableNumberValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableNumberValue.m; sourceTree = ""; }; FF91F9344AF5B9FAEB941DAFB89A1A43 /* Pods-Lottie-Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Lottie-Example-umbrella.h"; sourceTree = ""; }; + FF9466C2CE362E7F670BEA870AEEC29A /* LOTAnimatableBoundsValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableBoundsValue.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -370,89 +556,122 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 17311B0686DA97F8C8A8E9EBFCBC4DB4 /* Frameworks */ = { + 35238516DA8B4E1DE968CC94C1A4BD2C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B2ED5EA8B978D595699CBFB605699041 /* AppKit.framework in Frameworks */, - 68A2BA4CE73ED32CC675BC82C1B977FC /* Cocoa.framework in Frameworks */, - DA08A39D886FA2A868996E198BB0C970 /* CoreVideo.framework in Frameworks */, + 15FC70FD083E40FAD0F5944D41DD88BE /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 35238516DA8B4E1DE968CC94C1A4BD2C /* Frameworks */ = { + 9400EE0ECE003B3ACEB89B6D5B7AB442 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 15FC70FD083E40FAD0F5944D41DD88BE /* Foundation.framework in Frameworks */, + B8BCA47B1A77DF95917998D9085EFAA9 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9400EE0ECE003B3ACEB89B6D5B7AB442 /* Frameworks */ = { + B76496579C2EA13957AEB26BBEF4EBEC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8BCA47B1A77DF95917998D9085EFAA9 /* Foundation.framework in Frameworks */, + FB72C9DF1B6F9FEE7A51DA20E76F747B /* Foundation.framework in Frameworks */, + 1F30B6E70D08BC569F2775C5346ACC8B /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F15C037E41BFA0D00A400FCDE5043C99 /* Frameworks */ = { + E5A2E846675A5E05C6D906B9F5A7E771 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 59E2531272AD19AF242FF4D4159621CE /* Foundation.framework in Frameworks */, - 4BD83C032B6F24FCFE7536C6FAF4BE9C /* UIKit.framework in Frameworks */, + CC36F9B9C8C3903676C4EAEBFD014413 /* AppKit.framework in Frameworks */, + 65577777457E6DBA5D3B8621DC5817A5 /* Cocoa.framework in Frameworks */, + 620C006871F134D0A36CEBCCE6235C31 /* CoreVideo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0506A96D30705B4524DA942E84252F38 /* AnimationCache */ = { + 157C9C284D674C9016C496DDEF9A7C2F /* RenderNodes */ = { isa = PBXGroup; children = ( - 6F7B4D50F58BACFCE82F837CFC0E0B1E /* LOTAnimationCache.h */, - 64CD3138F22AD66144DBF1ACEC05718B /* LOTAnimationCache.m */, + 0E40CC0519F709CE03F4930918662625 /* LOTFillRenderer.h */, + 296A78F539AD47B343BFE43C21E5DBAA /* LOTFillRenderer.m */, + 55C7515071DDB6440F570FAD195780ED /* LOTGradientFillRender.h */, + 3A59AB198589E310CD3BC625A37EC349 /* LOTGradientFillRender.m */, + AE1AE5DB601506215E5F0DA16B9D95CF /* LOTRenderGroup.h */, + D96056B276FEF7990D76B5332D196731 /* LOTRenderGroup.m */, + BCE15440B0DFC9DEEC53410CD14156D8 /* LOTRepeaterRenderer.h */, + DA204F5D822B2BA0EC33E894FA33D148 /* LOTRepeaterRenderer.m */, + 674ED4B84410CEC4438324FCED634104 /* LOTStrokeRenderer.h */, + 3EF95CCB8166AC042A5DE7DEA292F908 /* LOTStrokeRenderer.m */, ); - path = AnimationCache; + name = RenderNodes; + path = RenderNodes; sourceTree = ""; }; - 1E6096914E435F98090BD537F84A903A /* PublicHeaders */ = { + 26342C9887425AAD969E2A28B5DBF666 /* iOS */ = { isa = PBXGroup; children = ( - 914414B96714EB914D61E0BEE2A8D6BF /* LOTAnimationTransitionController.h */, - 58C8E12079AAF4734658684503009718 /* LOTAnimationView.h */, - B8EC75FDDFFB52B4ED42E4358DC422BB /* LOTAnimationView_Compat.h */, - 34AAD18AF1E8ADA45067CCF6637357FC /* Lottie.h */, + 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */, + CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */, ); - path = PublicHeaders; + name = iOS; sourceTree = ""; }; - 218221B6ACC32EB50A4A1E486BB5AC1A /* MacCompatability */ = { + 3220DC86D9DF639EEF63F72634DA5E23 /* Extensions */ = { isa = PBXGroup; children = ( - 2291D10156924ED8ACF668F742BA4EFA /* CADisplayLink.h */, - 07A2687B9A783F5CC62C643EB4EA5525 /* CADisplayLink.m */, - 2D439B1F575EABDDFD4050A2019CFE7A /* CALayer+Compat.h */, - CA67CFC4B5DD5D3E5C8D7FE862F30215 /* CALayer+Compat.m */, - 881EEB4F51912FE97204770FD6BB7B91 /* LOTPlatformCompat.h */, - A88D3C5B2CC70AEE302858512F95C8D0 /* NSValue+Compat.h */, - 135366D2D175D55F9BAA7638528E2658 /* NSValue+Compat.m */, - 9CC039FBA91E0B14F446E8591909284B /* UIBezierPath.h */, - F3209E4D9AC30E57E54489362BA4B728 /* UIBezierPath.m */, - 2051C729510DCE034CE5D49CB453D6CF /* UIColor.h */, - F080B2BBDEBC22A95A2703D948A9F160 /* UIColor.m */, + F5B270CF5888342399A2CCD5C586C161 /* CAAnimationGroup+LOTAnimatableGroup.h */, + DE1654180F1E3D404AD74E405A8809A0 /* CAAnimationGroup+LOTAnimatableGroup.m */, + 79CE823B01068A2EEAF747C0D9EAAD96 /* CGGeometry+LOTAdditions.h */, + AE5CAADAEE057607227764A408B3A2AB /* CGGeometry+LOTAdditions.m */, + 5792012DF7DDB09830FB0C73AB2D05CB /* LOTBezierPath.h */, + B5466FB41481AE4C1D2D3B41094ED320 /* LOTBezierPath.m */, + 63D30BE9BE2D1E59FF5D0BEE1D19D619 /* LOTHelpers.h */, + 3E844D49ECF9A50C37531AB79BACCCDD /* UIColor+Expanded.h */, + 3579F4133852B1738DBB86C24F23C08D /* UIColor+Expanded.m */, ); - path = MacCompatability; + name = Extensions; + path = Extensions; sourceTree = ""; }; - 26342C9887425AAD969E2A28B5DBF666 /* iOS */ = { + 3D9AB1E182363E0F1ED8A7D83EEDE212 /* InterpolatorNodes */ = { isa = PBXGroup; children = ( - 7B84DD8BA444B84A5807EA458734DA5D /* Foundation.framework */, - CA13E2F72B2A84E8D774F18DD936CA54 /* UIKit.framework */, + 864CAB57AC2441F15CEA2F13E3ED3D6E /* LOTArrayInterpolator.h */, + CDB745A2A31503423ED6268BD7008F89 /* LOTArrayInterpolator.m */, + 65C907346244458A0AA1ED86C7784232 /* LOTColorInterpolator.h */, + 16DCB018FFB84697F1C2C76B848120AF /* LOTColorInterpolator.m */, + 88BDD3A36C3C66D728C2F29FB2794C71 /* LOTNumberInterpolator.h */, + 0CC07B2467EB02A33FAF22C75C90CC88 /* LOTNumberInterpolator.m */, + 0F140E4F97B741FBE92D6D3B091F5284 /* LOTPathInterpolator.h */, + 69B2030F2D768F96895BF34166D45CBD /* LOTPathInterpolator.m */, + C29D693FABA3C811A0FC935937BB3E0B /* LOTPointInterpolator.h */, + 3856C8C99ED844926DFDE2F961890955 /* LOTPointInterpolator.m */, + 12BEA1C09A4450FD89F07B65C4CC0936 /* LOTRectInterpolator.h */, + 3C95BB9E40A9A21F4E352844B519F91A /* LOTRectInterpolator.m */, + 219BBEA62320DD9F344BB4B0E7D95613 /* LOTSizeInterpolator.h */, + 0AF95F1D74D03D7B26241C2B1266A826 /* LOTSizeInterpolator.m */, + 0703E815A6AB49F6DE0FE6F68D065013 /* LOTTransformInterpolator.h */, + 33E989A488E426AD86A70F047EFA7662 /* LOTTransformInterpolator.m */, + 328AB4D5DAD92812B1872E059EEBE723 /* LOTValueInterpolator.h */, + 9D565BCD46DF53304253F2C6DF7B7EDF /* LOTValueInterpolator.m */, ); - name = iOS; + name = InterpolatorNodes; + path = InterpolatorNodes; + sourceTree = ""; + }; + 3FDB12F8242F2E5D3D452C6DA73D8045 /* ManipulatorNodes */ = { + isa = PBXGroup; + children = ( + 17E642B97A89EABF6D7259848C8AADE7 /* LOTTrimPathNode.h */, + A032173731A7ABB16873D91D5BA9EEBF /* LOTTrimPathNode.m */, + ); + name = ManipulatorNodes; + path = ManipulatorNodes; sourceTree = ""; }; 417A991C6B1629905D86CF923D58402E /* Pods-Lottie-Example */ = { @@ -473,51 +692,98 @@ path = "Target Support Files/Pods-Lottie-Example"; sourceTree = ""; }; - 65E9A8A4295FB6F8FF878D1025EFD332 /* Private */ = { + 45B20BBA87634FEBE379CB9BCF93A13D /* PublicHeaders */ = { isa = PBXGroup; children = ( - 2CA0CDC65069F76EC463C7BF822D8F81 /* LOTAnimationTransitionController.m */, - DB02D4064CB782A2B964B46467FC9883 /* LOTAnimationView.m */, - 637635FDA11763E443BE882445C8F865 /* LOTAnimationView_Internal.h */, + 9D7AA16770765B06D2B77345786D406D /* LOTAnimationTransitionController.h */, + 5181E6B39A20B38D9B4E34EE983361EF /* LOTAnimationView.h */, + 759FE25B0ABE022202F7A1A1729E590F /* LOTAnimationView_Compat.h */, + BD8F152A1D1F152CE88E44E4D6BBEE00 /* Lottie.h */, ); - path = Private; + name = PublicHeaders; + path = PublicHeaders; sourceTree = ""; }; - 6AE6986C594A999FC82761A98637F1F4 /* Support Files */ = { + 45F23E6F821A6253AB54CCD8C58A5946 /* Support Files */ = { isa = PBXGroup; children = ( - 24787644A116CDE813D8A8BA713028BE /* Info.plist */, - 1CFEB0E1C0C1055A3411B98D51161788 /* Info.plist */, - 96B69884AAD3903EDA2E34D16F0BA362 /* lottie-ios-iOS.modulemap */, - 2245129E598EB9DC78D8E5E981507C52 /* lottie-ios-iOS.xcconfig */, - FF09253EB0B902C0017CD74BABB9FF52 /* lottie-ios-iOS-dummy.m */, - D10298087CCB7A83FB5C9FA172072C11 /* lottie-ios-iOS-prefix.pch */, - 9B7EB62E6422B6FC6089CDCDC79BAC8B /* lottie-ios-iOS-umbrella.h */, - 39945EB608BBD749FA4F5C044342CFE7 /* lottie-ios-OSX.modulemap */, - 283CCF83DE08CC09D1A75FFDC1E80AC2 /* lottie-ios-OSX.xcconfig */, - B9C926B498D73B1C3824C2B9732454E3 /* lottie-ios-OSX-dummy.m */, - 3FC6C122778B882931A442F9B6AAE024 /* lottie-ios-OSX-prefix.pch */, - 143FBAE486947C2718AE48A507426B54 /* lottie-ios-OSX-umbrella.h */, + FCD61B30751008C76B625BB6423F54AC /* Info.plist */, + 68BD4E155A46A5ACAC446D5FC4010BFB /* Info.plist */, + 57B1FEF3178D7604EED65FA3A99A03DD /* lottie-ios-iOS.modulemap */, + 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */, + 54C415EA7F1183D8CBF4DD450C8E917A /* lottie-ios-iOS-dummy.m */, + EAA55B722ECBCD50F62BBFB43D59B4B2 /* lottie-ios-iOS-prefix.pch */, + 0508D1F4EB475E8EA9FD7082C7562045 /* lottie-ios-iOS-umbrella.h */, + 804BBDA063F6BE0570BCF2BE94D00E85 /* lottie-ios-OSX.modulemap */, + 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */, + 60CC0BDE6346F89ADB5DB741F83E073E /* lottie-ios-OSX-dummy.m */, + 23289CF2CB9CCDE468ABF8D7040AB9F7 /* lottie-ios-OSX-prefix.pch */, + 7D00258E4C4D882665FA7673AF9DE81C /* lottie-ios-OSX-umbrella.h */, ); name = "Support Files"; path = "Example/Pods/Target Support Files/lottie-ios-OSX"; sourceTree = ""; }; - 730865E0CB7EEA648CB500FDFC57C83E /* Classes */ = { + 46A9C7D7B19FE1A28CF1090D72563932 /* Classes */ = { isa = PBXGroup; children = ( - FB1DCCCD09EDF1FFC79E6167743637ED /* AnimatableLayers */, - 967F0570FF3BC29E91C90300840DAF8D /* AnimatableProperties */, - 0506A96D30705B4524DA942E84252F38 /* AnimationCache */, - 9CC1C2F937020A41775B25A78B7BBC4D /* Extensions */, - 218221B6ACC32EB50A4A1E486BB5AC1A /* MacCompatability */, - B92F800F35D373AC08ACA943C99081B8 /* Models */, - 65E9A8A4295FB6F8FF878D1025EFD332 /* Private */, - 1E6096914E435F98090BD537F84A903A /* PublicHeaders */, + C0C5F182346CD7577D690CE123E8776F /* AnimatableLayers */, + CD3A0661CC1FF0B77F530DBBD859A18E /* AnimatableProperties */, + DA4CD8056D1C125430693F77E83A74DF /* AnimationCache */, + 3220DC86D9DF639EEF63F72634DA5E23 /* Extensions */, + EB53485DA2FA2BBB931C1468181621C4 /* MacCompatability */, + 6F61B5C32237CF61CC189640BA9A3316 /* Models */, + EB3E9168441EEED818884609567A4F9C /* Private */, + 45B20BBA87634FEBE379CB9BCF93A13D /* PublicHeaders */, + BAB779AD593CCD67B09F062644676BF1 /* RenderSystem */, ); + name = Classes; path = Classes; sourceTree = ""; }; + 6F61B5C32237CF61CC189640BA9A3316 /* Models */ = { + isa = PBXGroup; + children = ( + A0C988E83B337ACF752F6C9101FC6608 /* LOTAsset.h */, + D0D967F48ECE504C7D000E74AA8DB233 /* LOTAsset.m */, + 25D72A954C42B01E2A3DEBD7AF636F16 /* LOTAssetGroup.h */, + 4AF177F139DE4C983CE5B58D93715AA5 /* LOTAssetGroup.m */, + 89190F0545464BBA9E3077016A4C90A1 /* LOTComposition.h */, + 8D1FD2DA1AD70E052254D75D8BCCC3F7 /* LOTComposition.m */, + E6348AA26B1DB92CA85E7D6E538CE26F /* LOTLayer.h */, + 07D16B0A88C42F3A45DFCBCE2B83E73A /* LOTLayer.m */, + B2F443FBC6741B221175CA34596BEFF0 /* LOTLayerGroup.h */, + 341EBA4D16E96A40B34F85AD23888058 /* LOTLayerGroup.m */, + DCACDE3182C346B0BC0D8388F899D9FA /* LOTMask.h */, + DF4D56F89FE7578F292439887CB294E3 /* LOTMask.m */, + 1A4F26680896F8C695875FFECC48F415 /* LOTModels.h */, + 7A11DF77F3716538B028EB899339EEA2 /* LOTShapeCircle.h */, + BA0DBDCF88E584AE2EC0B6B38D8C0999 /* LOTShapeCircle.m */, + 1420D2A58C8D413E49BABE36F8F18127 /* LOTShapeFill.h */, + 8E4BF2FF4C5A3F3C7B74A46AD379DB47 /* LOTShapeFill.m */, + F134ED5A5C7C345BEDDC3564E6CB7A18 /* LOTShapeGradientFill.h */, + CAD6C4BBBA4E90ED57238F63DADC3E4B /* LOTShapeGradientFill.m */, + EF218CD3EAEB2D0BA035E5FC225B1FC8 /* LOTShapeGroup.h */, + 3A813F7ADF83DB801E58EA8E406F8C0E /* LOTShapeGroup.m */, + 4AE22E44E0D473D26B9E644895267DA8 /* LOTShapePath.h */, + 326D7EFBD332985E51AD7855DDA843BE /* LOTShapePath.m */, + 0FAFDA2EC2EE1832050C325881172C24 /* LOTShapeRectangle.h */, + 8D6D30F36C16285258371999FDA5FA66 /* LOTShapeRectangle.m */, + 3580FD31FA8AF696C1AF05B772A803CA /* LOTShapeRepeater.h */, + 1AD96C504BE13F612B1F34B4A2E69299 /* LOTShapeRepeater.m */, + A783A313156EA232996758A6B2CCEB0B /* LOTShapeStar.h */, + 388024020FC28E589F205A89434EEE95 /* LOTShapeStar.m */, + A814EA9037910E809C40A50CB02627CE /* LOTShapeStroke.h */, + F4BE8C929E79B1C17ED2794374349B06 /* LOTShapeStroke.m */, + E611F5226F9E156701013E03E5DF7933 /* LOTShapeTransform.h */, + 318636ED189D69AAE648762B88DF8C4E /* LOTShapeTransform.m */, + 9EA2D1FDF82BEBD6CFEA688AB7665DC0 /* LOTShapeTrimPath.h */, + 8ABDE11857F92386508F3CBE215EEDE8 /* LOTShapeTrimPath.m */, + ); + name = Models; + path = Models; + sourceTree = ""; + }; 74014EA21B36D4548E21AE83073A4697 /* Pods-lottie-ios_Tests */ = { isa = PBXGroup; children = ( @@ -565,92 +831,114 @@ name = "Development Pods"; sourceTree = ""; }; - 967F0570FF3BC29E91C90300840DAF8D /* AnimatableProperties */ = { + A548659F165EEAABADBF152D8985886E /* OS X */ = { isa = PBXGroup; children = ( - 7E677FA9492A8C0F8CF594651DE45ECA /* LOTAnimatableBoundsValue.h */, - 47CF51B50C6B7972E0415722CB41EE05 /* LOTAnimatableBoundsValue.m */, - 09D4869FFC14B1BE3C9C20B5C9E01698 /* LOTAnimatableColorValue.h */, - CFC75E8B2BA0F60139EB6FDA6C9B399D /* LOTAnimatableColorValue.m */, - 76643F10D8F856E523E3B86403ED8862 /* LOTAnimatableNumberValue.h */, - 37A3DEC75ECC68471C6A89366BC6CF86 /* LOTAnimatableNumberValue.m */, - A967CCA3990EA603337F2488E57F0AD9 /* LOTAnimatablePointValue.h */, - 6F3B3E78F9D14443E9EF3374C64E36C2 /* LOTAnimatablePointValue.m */, - 5B0F7BB6147A18AAF6611D0F19252F05 /* LOTAnimatableScaleValue.h */, - 85F5F4F48B33DAF7D030B1474E5F3223 /* LOTAnimatableScaleValue.m */, - 56793538DC941950DAD1411157F487D5 /* LOTAnimatableShapeValue.h */, - C3C6E91956838B1D9712FFE89A954CDC /* LOTAnimatableShapeValue.m */, - B13317054964823CCCBD113DC0EA8B4E /* LOTAnimatableValue.h */, + 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */, + 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */, + DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */, ); - path = AnimatableProperties; + name = "OS X"; sourceTree = ""; }; - 9CC1C2F937020A41775B25A78B7BBC4D /* Extensions */ = { + A5A67D75E474B43D4324277B0D2320B2 /* lottie-ios */ = { isa = PBXGroup; children = ( - 5B243131CF5F997328F39DC9B8C5E1AA /* CAAnimationGroup+LOTAnimatableGroup.h */, - 8C6F1FDABFE7BA46F4C335C355203BD6 /* CAAnimationGroup+LOTAnimatableGroup.m */, - 9ADF6456FCDD472C05DD54C7589DE47A /* CGGeometry+LOTAdditions.h */, - A8F6DE4263402D3A5F6C3CADDE15FDA3 /* CGGeometry+LOTAdditions.m */, - B2B5D49E03C30CB6267C9203F209D484 /* LOTHelpers.h */, - C879D49ED5AFA937A0172507B1F454BD /* UIColor+Expanded.h */, - A21DBF047863956DFA410BAEE3E42C1B /* UIColor+Expanded.m */, + 46A9C7D7B19FE1A28CF1090D72563932 /* Classes */, ); - path = Extensions; + name = "lottie-ios"; + path = "lottie-ios"; sourceTree = ""; }; - A548659F165EEAABADBF152D8985886E /* OS X */ = { + BAB779AD593CCD67B09F062644676BF1 /* RenderSystem */ = { isa = PBXGroup; children = ( - 63E8A32304416366E7C4FC7A2D6C3A08 /* AppKit.framework */, - 8F9FC62FF143AB6667CDD8163FCFDE1C /* Cocoa.framework */, - DFB9B48CA5FB64F65C9333F75A778DD2 /* CoreVideo.framework */, + 3445372404148934206C8AD88C866A6E /* LOTAnimatorNode.h */, + 7C360BBF96FFD291D8FA8045AD64EC9B /* LOTAnimatorNode.m */, + BCE980BBA27BAE090D28D90AA8709981 /* LOTRenderNode.h */, + C1417915592C03D37ED8C6502580A38B /* LOTRenderNode.m */, + C54521544A2119B59699D2630BD20F05 /* AnimatorNodes */, + 3D9AB1E182363E0F1ED8A7D83EEDE212 /* InterpolatorNodes */, + 3FDB12F8242F2E5D3D452C6DA73D8045 /* ManipulatorNodes */, + 157C9C284D674C9016C496DDEF9A7C2F /* RenderNodes */, ); - name = "OS X"; + name = RenderSystem; + path = RenderSystem; sourceTree = ""; }; - A619B21630D8FBCCD05871350496FD40 /* lottie-ios */ = { + C0C5F182346CD7577D690CE123E8776F /* AnimatableLayers */ = { isa = PBXGroup; children = ( - 730865E0CB7EEA648CB500FDFC57C83E /* Classes */, + 7B22149E837A08CE923717A44E9206F1 /* LOTAnimatableLayer.h */, + 8B3C789D96D4B0A33675C6BFF14EBA1A /* LOTAnimatableLayer.m */, + CB0E12111C5B1EBBB64754A889D30B27 /* LOTCompositionContainer.h */, + AC1DBBDF91449577D8F6EBEE01FFD35D /* LOTCompositionContainer.m */, + CC7C2BB575EE57203BE0FD9BFFA53497 /* LOTCompositionLayer.h */, + D13D9E1B7535012933250907D1457AD7 /* LOTCompositionLayer.m */, + 17C0788335ADFE1D57ECC80FDE8696CB /* LOTEllipseShapeLayer.h */, + ECFB5C58404EA5C9ACE0F9C8C4DFE7E8 /* LOTEllipseShapeLayer.m */, + F9B58E65C06AA5FAE8D450C3C97D3B7A /* LOTGroupLayerView.h */, + 2C30AAF86EA9753FC2DAE56E8906A311 /* LOTGroupLayerView.m */, + 8EEF78B0574E13E845F3AD68DB7671CB /* LOTLayerContainer.h */, + 8B720945BE745838340B12DAE2DACE7D /* LOTLayerContainer.m */, + 1A631F9D585137CC027709307819643B /* LOTLayerView.h */, + B168856CEDE764595AB425C4CC9EE068 /* LOTLayerView.m */, + 90209B8399C230E4E3B42477C0F50985 /* LOTMaskContainer.h */, + 1D8F2ABDEE048AF63C15AAAFB7393526 /* LOTMaskContainer.m */, + DD80E684013C492201E1FA69B0FA163C /* LOTMaskLayer.h */, + 57A80B376732519811B58F9B732D68E8 /* LOTMaskLayer.m */, + C4857339627199703934116F2FC0CF09 /* LOTRectShapeLayer.h */, + BBA3A2FF0DB7F9B4F861D9B5872428E6 /* LOTRectShapeLayer.m */, + 0C8E35631C13FDF8C6A374E2DA57C0A0 /* LOTShapeLayerView.h */, + D5D9AF86F883FCECA2AE47C933BE72E6 /* LOTShapeLayerView.m */, + 25E8BB410932122E05451F34B19D2760 /* LOTStrokeShapeLayer.h */, + 4A2D07E396EAC0B4E40CA9FAA21CE962 /* LOTStrokeShapeLayer.m */, ); - path = "lottie-ios"; + name = AnimatableLayers; + path = AnimatableLayers; sourceTree = ""; }; - B92F800F35D373AC08ACA943C99081B8 /* Models */ = { + C54521544A2119B59699D2630BD20F05 /* AnimatorNodes */ = { isa = PBXGroup; children = ( - 27D467970A714314E2B75E0E5425CDBD /* LOTAsset.h */, - 2F45FF19B69DCCD5C9D90CD1DCD8E196 /* LOTAsset.m */, - 15F3855A2E3FB1A31C7B255C02416A0D /* LOTAssetGroup.h */, - 1D08AFCE3A77543E1ACC022CE32E8CB2 /* LOTAssetGroup.m */, - F6B56016B1B4AE46FD01AA5A099CD6F7 /* LOTComposition.h */, - ABC798B7199E43A9FFAB300F4B8014F9 /* LOTComposition.m */, - 2854B9A9C5594BC655C1F2A2F9B3FF9A /* LOTLayer.h */, - B9191C9CA6BC255452FF3A1E23A8AD31 /* LOTLayer.m */, - 086D453C029FEA4E5D07A0CF42F5EAE9 /* LOTLayerGroup.h */, - 4FD2ED630D49F082C9313D66CE641990 /* LOTLayerGroup.m */, - 8BF25D6B425C44665A0F8F7355AF7F22 /* LOTMask.h */, - 9ED0494E573973A4A8CE20BC61BD7741 /* LOTMask.m */, - 6FB591717486019552A2EDC7CC23C5FF /* LOTModels.h */, - 5F2FEDF4A82D7854224BDFCB4266741D /* LOTShapeCircle.h */, - 19C656A498AE48F5DD283FE85E50C005 /* LOTShapeCircle.m */, - 0E557697A150EC866389A6FE90663F36 /* LOTShapeFill.h */, - 245FC7E900009D6879BB913BB69D2D82 /* LOTShapeFill.m */, - D144F43B992D0FC2E3FA0E8F347235FC /* LOTShapeGroup.h */, - 84BA71AD6D24ECBF13FA2CC24E3C3EB2 /* LOTShapeGroup.m */, - B5F78C64D2ACDCA9E1704E626F92D5AD /* LOTShapePath.h */, - 6811434B3DAB7754101483A530405466 /* LOTShapePath.m */, - 90F28D953D30A989FA29A1ABB565837A /* LOTShapeRectangle.h */, - 3A6B62DF1DBBB373E0B2BACF705AB122 /* LOTShapeRectangle.m */, - C90C311450EC6DC84E23C510D63B960F /* LOTShapeStroke.h */, - E6B899FA984022ACBAC1E00F75173A50 /* LOTShapeStroke.m */, - 8D60D8B243F07BFF1F4037F70108FD8F /* LOTShapeTransform.h */, - 2D9E8CEEDDE48C9C1DB72357B3C719FA /* LOTShapeTransform.m */, - 5407A58FD4D852D55BBE6B75176EF5DC /* LOTShapeTrimPath.h */, - 07B34B557DAB322300CFBB55DAA449B4 /* LOTShapeTrimPath.m */, + 5B037A4CD134F5DC66F89C0BB553A896 /* LOTCircleAnimator.h */, + 7405DBDB8E500FB807DFB9C657855A7B /* LOTCircleAnimator.m */, + 94A20DB0B63D081E857C1B0A169C5E94 /* LOTPathAnimator.h */, + DA1F1F8F670D2EB6EAFEBD673C338ACC /* LOTPathAnimator.m */, + AEE2F9A829A810DF3991EB1A84212177 /* LOTPolygonAnimator.h */, + A805DC88D13AB289304EB1618C1532DA /* LOTPolygonAnimator.m */, + B5373820252BAF7D1D6DC04D4A803B85 /* LOTPolystarAnimator.h */, + 501AEE9E3360814DD5B45B9366E6F115 /* LOTPolystarAnimator.m */, + 094A2F666BB5BDABA9202EE2566B0431 /* LOTRoundedRectAnimator.h */, + CD9540149A0E41F9B4BEB62BE4113555 /* LOTRoundedRectAnimator.m */, ); - path = Models; + name = AnimatorNodes; + path = AnimatorNodes; + sourceTree = ""; + }; + CD3A0661CC1FF0B77F530DBBD859A18E /* AnimatableProperties */ = { + isa = PBXGroup; + children = ( + 8223CC17B3077CCB25A39BEF25012AE1 /* LOTAnimatableBoundsValue.h */, + FF9466C2CE362E7F670BEA870AEEC29A /* LOTAnimatableBoundsValue.m */, + 5CE6E29CA535D5519BD6F9F9B13A3A4D /* LOTAnimatableColorValue.h */, + CD5E1880A9D4AEF5D8CBFAEF7FB1E1F9 /* LOTAnimatableColorValue.m */, + 9D7E3118109CF8B7DD0F99B2E923D3B6 /* LOTAnimatableNumberValue.h */, + FE66595595D6EFC9940ED68A7F0CB95D /* LOTAnimatableNumberValue.m */, + 41172C6EC025E76933F93D5769B2177E /* LOTAnimatablePointValue.h */, + 43D525DEBA25C886A81FDF7B726BA577 /* LOTAnimatablePointValue.m */, + EA810243EBC8D6BD1B79599FCE41C4C7 /* LOTAnimatableScaleValue.h */, + EECE0809A0923A6FD452BE529F7A6EC5 /* LOTAnimatableScaleValue.m */, + 0552670BA1CEE193554BAA92420F7D04 /* LOTAnimatableShapeValue.h */, + 3FC4E4FE5282714187DF1A0B77A3A941 /* LOTAnimatableShapeValue.m */, + 144D7020F1BD068ED8C973E5097905AE /* LOTAnimatableValue.h */, + 1C48FF8CB94A64ED37E742B5C3086FED /* LOTBezierData.h */, + 8D43DCCF8C1ACE74CAB533898E703C37 /* LOTBezierData.m */, + D8EF06019D9076C6EEB83F463501D92C /* LOTKeyframe.h */, + CE1C1DBC0E70EB8726F3CC0383B80073 /* LOTKeyframe.m */, + ); + name = AnimatableProperties; + path = AnimatableProperties; sourceTree = ""; }; D2431C38CE75E5F9371ACA56742FA10D /* Products */ = { @@ -683,6 +971,16 @@ path = "Target Support Files/Pods-Lottie-Example-MacOS"; sourceTree = ""; }; + DA4CD8056D1C125430693F77E83A74DF /* AnimationCache */ = { + isa = PBXGroup; + children = ( + F46A835F009EAD5B465E106483FBEBAA /* LOTAnimationCache.h */, + B75927E61568455C2B19DD83E7C1F641 /* LOTAnimationCache.m */, + ); + name = AnimationCache; + path = AnimationCache; + sourceTree = ""; + }; DE13583AB8F794BBEAF85E3A80DA349C /* Frameworks */ = { isa = PBXGroup; children = ( @@ -692,39 +990,44 @@ name = Frameworks; sourceTree = ""; }; - F13189DB0902F98D525915FBB3DAB361 /* lottie-ios */ = { + EB3E9168441EEED818884609567A4F9C /* Private */ = { isa = PBXGroup; children = ( - A619B21630D8FBCCD05871350496FD40 /* lottie-ios */, - 6AE6986C594A999FC82761A98637F1F4 /* Support Files */, + 11BD7658407F741C44DB768EDCB40C01 /* LOTAnimationTransitionController.m */, + B992FB464B1C74A558428D9ACD5726C5 /* LOTAnimationView.m */, + 6783C9F2F59B08ECB7AC6FADC31357A0 /* LOTAnimationView_Internal.h */, ); - name = "lottie-ios"; - path = ../..; + name = Private; + path = Private; sourceTree = ""; }; - FB1DCCCD09EDF1FFC79E6167743637ED /* AnimatableLayers */ = { + EB53485DA2FA2BBB931C1468181621C4 /* MacCompatability */ = { isa = PBXGroup; children = ( - 39EED9104A47BEAEF0F430C1FF4CCBD8 /* LOTAnimatableLayer.h */, - 3865FADCCADCC789674635969A6D45AD /* LOTAnimatableLayer.m */, - 62D10B08778FD7C95EF48165655F8766 /* LOTCompositionLayer.h */, - E6E83A8E496CBAE5AAC3B3D9299E2AA4 /* LOTCompositionLayer.m */, - DBD3A7C74DF81C37C079DE2EFDBFDCD6 /* LOTEllipseShapeLayer.h */, - 116280A338E6B12358C68FFD8BE4CDE0 /* LOTEllipseShapeLayer.m */, - 57DC28EC5873B72A9C2B9CF1CE17D042 /* LOTGroupLayerView.h */, - 6C88C9CD01610FF1CA51092B5A23A4EE /* LOTGroupLayerView.m */, - 2ED0EE10CC23DF4EEE54CA6FCE2EFDC7 /* LOTLayerView.h */, - 6CFD56EA32C4E280C127079F4FB7A509 /* LOTLayerView.m */, - CD73C7C52052CD35A0DDCBAAEBC58080 /* LOTMaskLayer.h */, - 8FB90BAB8F6CA800171B1FA971BC8F51 /* LOTMaskLayer.m */, - A4377674E676A5649E73DB44A3AE4EAE /* LOTRectShapeLayer.h */, - 501BB506A518EBF1C596EB2E412F90F4 /* LOTRectShapeLayer.m */, - 52D995D53F86B98BB22E03B39A29B515 /* LOTShapeLayerView.h */, - 5710AF0C8EE895A5CD661C97A865E9F1 /* LOTShapeLayerView.m */, - 51C4E7E7E5B2E25ACB2BD6E6A3EDE38D /* LOTStrokeShapeLayer.h */, - 8698F0871C3DF54D5ED95C86B908DC10 /* LOTStrokeShapeLayer.m */, + C45E9D3E14D71A060EAB1CF9A375F201 /* CADisplayLink.h */, + 97194F258F84546499008120D1B31065 /* CADisplayLink.m */, + 3E865D3F6905C6C5D24D4666E66852BB /* CALayer+Compat.h */, + 4282CB94480ABCBE6A70C9B60B19C05F /* CALayer+Compat.m */, + 0D0CB70031569DEA955CBA27C740E901 /* LOTPlatformCompat.h */, + 58D7E8EB20DD1B2C5D8BB8D915513D29 /* NSValue+Compat.h */, + DFCEA9355A28F04AF74A8CA27F76AB87 /* NSValue+Compat.m */, + 62BE932BE826615EE168F3067495B9FB /* UIBezierPath.h */, + 419F1046E8EB9C2DE9FDB47AA4539CA3 /* UIBezierPath.m */, + A426B57B24F902D565A50CCD92E93E58 /* UIColor.h */, + F284632DA860D431BE72D6D7CE04C2A5 /* UIColor.m */, ); - path = AnimatableLayers; + name = MacCompatability; + path = MacCompatability; + sourceTree = ""; + }; + F13189DB0902F98D525915FBB3DAB361 /* lottie-ios */ = { + isa = PBXGroup; + children = ( + A5A67D75E474B43D4324277B0D2320B2 /* lottie-ios */, + 45F23E6F821A6253AB54CCD8C58A5946 /* Support Files */, + ); + name = "lottie-ios"; + path = ../..; sourceTree = ""; }; /* End PBXGroup section */ @@ -738,129 +1041,191 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 396107498C43BAE122604759230494C3 /* Headers */ = { + 3D68CC88C837BDC4C4307C02479C43BA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3FA70D9812A77215F25AD61AEEBE28D8 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, - 607EF7BF53564F11402B0FB1E5DBAF24 /* CADisplayLink.h in Headers */, - C32E6428C8E7196537B4713BF6598EFB /* CALayer+Compat.h in Headers */, - 33AA835B80C0ADDD72609DC28B01BE95 /* CGGeometry+LOTAdditions.h in Headers */, - 4C896FC0C97800BB6CE431B6B0C289E0 /* LOTAnimatableBoundsValue.h in Headers */, - 6E25DB56FA93546647DFF1E2F815D73D /* LOTAnimatableColorValue.h in Headers */, - 8CAD0EFB21AAB56A0A31E101E1128F71 /* LOTAnimatableLayer.h in Headers */, - 75FDBC6F8D70AF8FA5CCE5D539B715FB /* LOTAnimatableNumberValue.h in Headers */, - 7A382830511CFB02F38892AF1F7F8C38 /* LOTAnimatablePointValue.h in Headers */, - 57CFA6C49999259AF1A2E733C0163774 /* LOTAnimatableScaleValue.h in Headers */, - 6582149C4680B3CF13FDF83D7EF9A063 /* LOTAnimatableShapeValue.h in Headers */, - A024240193F3B2D116B8418C879D806F /* LOTAnimatableValue.h in Headers */, - B690C18B48E7A1FAD169DBB6344165E6 /* LOTAnimationCache.h in Headers */, - E6022702EF664A74A4A6ECF3F8FEBCDD /* LOTAnimationView.h in Headers */, - 4883E5711E68D84B00027E57 /* LOTAnimationTransitionController.h in Headers */, - C9EFD5C7F873A8316D9B2892BE38C878 /* LOTAnimationView_Compat.h in Headers */, - 661E56EC0F97C1D2D9CF997B023FC7BF /* LOTAnimationView_Internal.h in Headers */, - 7B11A7C3F5F2BC0D32A167825B960B63 /* LOTAsset.h in Headers */, - 4F003A28EFFEA2BA264CE03DC6ABEECD /* LOTAssetGroup.h in Headers */, - 27CFA3CC73F41A252B701CD9EEAD7470 /* LOTComposition.h in Headers */, - 5F71C2EE951F227DAF312ED95FC7C750 /* LOTCompositionLayer.h in Headers */, - BD65A5B3F0F88705D2510F48A5B6A266 /* LOTEllipseShapeLayer.h in Headers */, - 08B10BCCC1E87B81687EA6B0D05A9275 /* LOTGroupLayerView.h in Headers */, - 05F0B7C16305D661EC5AAB8133C4ECFC /* LOTHelpers.h in Headers */, - 40BEF7B24FCC147ED27B090F862F25B6 /* LOTLayer.h in Headers */, - 405C453448D6809099DFA49A38348045 /* LOTLayerGroup.h in Headers */, - 932BD23FD0FF220462100AA003BA7AA6 /* LOTLayerView.h in Headers */, - A96D7B03F5CD6FAB227B7A28B1477B2A /* LOTMask.h in Headers */, - 4E254C733BBF03B4A88371C296D4CE3F /* LOTMaskLayer.h in Headers */, - 1097EA5C016455DF2744F8E5C33F6F13 /* LOTModels.h in Headers */, - 6666E5DA54A388EECEF6AC4C086FC561 /* LOTPlatformCompat.h in Headers */, - C7A99EF52664EE8AC33A713A72264A62 /* LOTRectShapeLayer.h in Headers */, - 1B30DE81460C85578CA35E6ED2AA3099 /* LOTShapeCircle.h in Headers */, - E9802C36356169B91AC552F501452493 /* LOTShapeFill.h in Headers */, - BB0F55CF329E0FBF2CB523C1FCC06CF3 /* LOTShapeGroup.h in Headers */, - B1C8689934816DE75C304B29D4534A7C /* LOTShapeLayerView.h in Headers */, - 1497E43F3CD0AE36A2021B7E188EF755 /* LOTShapePath.h in Headers */, - 7924FA65B26632ABBC39B8AFCF8E80A5 /* LOTShapeRectangle.h in Headers */, - A18245315476E21AEC41BEE555932734 /* LOTShapeStroke.h in Headers */, - D680D594D6D19833563BDA31588BD970 /* LOTShapeTransform.h in Headers */, - CFBD241815973AD097E6297D52DD0496 /* LOTShapeTrimPath.h in Headers */, - 4C4037AE09CD91F363F8D79D5ED6E079 /* LOTStrokeShapeLayer.h in Headers */, - 5D448A1D8C9D15483BC81CF504788523 /* lottie-ios-OSX-umbrella.h in Headers */, - 1005026580D1A0EE6BF10DC58CAE4172 /* Lottie.h in Headers */, - B097614927B93BD972890236987C8B5E /* NSValue+Compat.h in Headers */, - DFA4EF49840297EADEAFC6A239E4675F /* UIBezierPath.h in Headers */, - C4BD6BAAA21843AB358913AA89713359 /* UIColor+Expanded.h in Headers */, - 2F9FAB94B28553F868EC7BDDDF4947BE /* UIColor.h in Headers */, + 6E546A07530D4E0B229B36F2BC7AFC89 /* Pods-Lottie-Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3D68CC88C837BDC4C4307C02479C43BA /* Headers */ = { + 6D387232BA3FD4B5B0712B70F73F734B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6E546A07530D4E0B229B36F2BC7AFC89 /* Pods-Lottie-Example-umbrella.h in Headers */, + E9EC2EEDB9D1F159DF490A5FE1BF26AE /* Pods-Lottie-Example-MacOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6D387232BA3FD4B5B0712B70F73F734B /* Headers */ = { + 93BAE48FB1F6FF4712C625A510BB9F13 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E9EC2EEDB9D1F159DF490A5FE1BF26AE /* Pods-Lottie-Example-MacOS-umbrella.h in Headers */, + C3321A35352E4E2F4E6C38AED370B973 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, + EEAA4D06DAD0497060866E62E3DCD982 /* CADisplayLink.h in Headers */, + F91906FAC0BE2ABB3D91EF0A7FF3957C /* CALayer+Compat.h in Headers */, + 60F4AE5E41F5CE228A76FE7764C1797C /* CGGeometry+LOTAdditions.h in Headers */, + 6EA1EAC1642F98E4FC267D131131851D /* LOTAnimatableBoundsValue.h in Headers */, + 00321FA7409EC08E3572FC5E5B2D68FB /* LOTAnimatableColorValue.h in Headers */, + 8507A78029943D9AD811D73CB88C3464 /* LOTAnimatableLayer.h in Headers */, + D9CD49D31857D80C36989DAEB6A4E2BC /* LOTAnimatableNumberValue.h in Headers */, + 217E9F0006DE5949FC409E2940738087 /* LOTAnimatablePointValue.h in Headers */, + 290192EFD91A84FB87EB1E53391A73D7 /* LOTAnimatableScaleValue.h in Headers */, + 656B081D2C66D7E2B9DF5F3D153A70E3 /* LOTAnimatableShapeValue.h in Headers */, + 88C0E344607D7F4A4E29B8226438EA74 /* LOTAnimatableValue.h in Headers */, + 596BF301DC623CB4EEAF111677DEC058 /* LOTAnimationCache.h in Headers */, + E3C2E08E387AD4983304AC9523CD1250 /* LOTAnimationTransitionController.h in Headers */, + F82E769FA2200B729EE54456920CD75A /* LOTAnimationView.h in Headers */, + 5ADF602CEB4E463567028A4038CC3930 /* LOTAnimationView_Compat.h in Headers */, + 9A1B1B2C50BE8265D81AE82DA1E3FD19 /* LOTAnimationView_Internal.h in Headers */, + 39B519B37B5552DA8E3B577B85DEEADC /* LOTAnimatorNode.h in Headers */, + 8D40913A5995E5B357C240C22187FCD7 /* LOTArrayInterpolator.h in Headers */, + 4C6F0504215F9333468C970CCA2E156D /* LOTAsset.h in Headers */, + 5FC04048D99C9724B695D31A923DB038 /* LOTAssetGroup.h in Headers */, + 7805BB77E9FE147929E71966CC04FB8D /* LOTBezierData.h in Headers */, + 625B63A591AF3245ADC41321E5121E54 /* LOTBezierPath.h in Headers */, + 1EE4F828F5E2FDAD57520B7679D2BF25 /* LOTCircleAnimator.h in Headers */, + 6F91ECF29F6E6F0232861F04B2F1C104 /* LOTColorInterpolator.h in Headers */, + A605AA7ACC0CF38633D251B86731CAD5 /* LOTComposition.h in Headers */, + 85461FA55A80C0A6F10F202C5799F0BD /* LOTCompositionContainer.h in Headers */, + 6981F40514843D8324E98016657FCFBB /* LOTCompositionLayer.h in Headers */, + CD6BB4C6C6ED798A4D40017A1EFFFF89 /* LOTEllipseShapeLayer.h in Headers */, + A27B34B64D8DD664CBEA852CF581588E /* LOTFillRenderer.h in Headers */, + 397A0D1DEA821AD1B26CAE1A92BC59A9 /* LOTGradientFillRender.h in Headers */, + 8A55C9E760F0F38F55CD1BA4061AC951 /* LOTGroupLayerView.h in Headers */, + 3993343517111ACDD609A1EFBF7D263B /* LOTHelpers.h in Headers */, + 8181E8AF1D210C3A3087FFACD811C41B /* LOTKeyframe.h in Headers */, + E29FFCEC429E518BEBA4D5E81C517ED5 /* LOTLayer.h in Headers */, + 4EC59F7745228E8915B03811328FBBF1 /* LOTLayerContainer.h in Headers */, + 687E3E1DBC736FCCA2A52D49C6F96383 /* LOTLayerGroup.h in Headers */, + 78CEDB40F064E3FF8665149AF6A42935 /* LOTLayerView.h in Headers */, + 39C857CE2E52D8A3DEA32B822AB25B8E /* LOTMask.h in Headers */, + 7E992FB17CB8979EEB8E95CE2A7839EC /* LOTMaskContainer.h in Headers */, + 7B98585A5DE9362B03C982653560517B /* LOTMaskLayer.h in Headers */, + 90852233B2794F6BD6EEF404059291F8 /* LOTModels.h in Headers */, + 24B999B5E2EFBCFFB4A0A5A4B47B431C /* LOTNumberInterpolator.h in Headers */, + 59A8B54AA10E119DB2D9BE65234592CF /* LOTPathAnimator.h in Headers */, + 3E4C736ED8978556F2385A59524C2853 /* LOTPathInterpolator.h in Headers */, + A5E14312238E2EE5C96A1B6DD844EEB9 /* LOTPlatformCompat.h in Headers */, + D80B3FCCE88EBCFFABBB9D2FE6D1BB4F /* LOTPointInterpolator.h in Headers */, + DF0720142E53FAB34BD0B33FE6FDB27D /* LOTPolygonAnimator.h in Headers */, + 0833A1EA4D741C0C69870B8EF05CA3B9 /* LOTPolystarAnimator.h in Headers */, + 669F35630C96112A217C9B8F01F15DBE /* LOTRectInterpolator.h in Headers */, + 2A72F86EBBEDD90F3FC9D163DD9BBFCE /* LOTRectShapeLayer.h in Headers */, + 45F8CCAE26DDCCADDC68F964E2AA5AF6 /* LOTRenderGroup.h in Headers */, + 62E8B2D7010EB096097D3D0EC715FD8C /* LOTRenderNode.h in Headers */, + 0E46C0445C1810BAE594CDC7285A21A3 /* LOTRepeaterRenderer.h in Headers */, + DA1D8BDD846BD1C274F8926887F32C32 /* LOTRoundedRectAnimator.h in Headers */, + FE10118AE8AE825316D930E7C80120C6 /* LOTShapeCircle.h in Headers */, + CC8D80FFEC5B07C92BCCBD36A4CBAAE5 /* LOTShapeFill.h in Headers */, + AC642A4FCFD170F4262C45178F8F841D /* LOTShapeGradientFill.h in Headers */, + F42B0DB38FFB2E86878F27A5843B2B1A /* LOTShapeGroup.h in Headers */, + BFC3E907E8F2EA534403B45F7160914C /* LOTShapeLayerView.h in Headers */, + BBC02ADCC36811A40E88FB810385C154 /* LOTShapePath.h in Headers */, + 645EC6D2B7DB0E9B6458A2F28210B62C /* LOTShapeRectangle.h in Headers */, + DEED500FE5C0BC26D110F4D5899C065D /* LOTShapeRepeater.h in Headers */, + 3C618867F8471C0E2CD2B51DF00ED27C /* LOTShapeStar.h in Headers */, + B6C6D7403860CBA1BB107BDCD418D86F /* LOTShapeStroke.h in Headers */, + FEAA7367521F6EAC74EB9F31DDEC1E2A /* LOTShapeTransform.h in Headers */, + CD34418A1A43919FBE2828F9BF883877 /* LOTShapeTrimPath.h in Headers */, + E0BD8EF2BA45DC0189D2DE67AD6DA019 /* LOTSizeInterpolator.h in Headers */, + 70AB374ADFAB314408485338DF234EA2 /* LOTStrokeRenderer.h in Headers */, + 213727523396C6304ADD120BFD6C9D39 /* LOTStrokeShapeLayer.h in Headers */, + 63233107F0F58122B9F430D711C74C14 /* lottie-ios-iOS-umbrella.h in Headers */, + 3ABC7DC48D73BBD3F2034B023F66CA3D /* Lottie.h in Headers */, + A46AFC79371EBC669640400DE2EA788A /* LOTTransformInterpolator.h in Headers */, + 5587E20EFBA626E2A7D95A59D466AC20 /* LOTTrimPathNode.h in Headers */, + D540E4FB2B7761738E077968F59BC941 /* LOTValueInterpolator.h in Headers */, + 42A95071DE6F496FDA046EF5B3FD8677 /* NSValue+Compat.h in Headers */, + C12D4CAE7958C9C0B5070D2DD561A845 /* UIBezierPath.h in Headers */, + F5800EC46A46BE442CC66E788371F70E /* UIColor+Expanded.h in Headers */, + BE78E92F9B150CF5DBC210F79E21DF2F /* UIColor.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C8717807711221AEA6097B65A67F96C2 /* Headers */ = { + AE43AD1A29681FACD8AD7816620787AC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 47133BA53ED25EB501CD920A7EB38C3A /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, - 42DB835C32BA71F1A85A5B37CAB0B57F /* CADisplayLink.h in Headers */, - AAC4E7F14B261127A53AF42AC747E66E /* CALayer+Compat.h in Headers */, - 812A8E2BDA7BDB4EC3513277C931CB41 /* CGGeometry+LOTAdditions.h in Headers */, - AA9AEF04B160B68CE2EF21051FA5B73D /* LOTAnimatableBoundsValue.h in Headers */, - 93002FB1FCF7E34F3A9CAA5B7F953C1F /* LOTAnimatableColorValue.h in Headers */, - ACCF93014A837F4EF52C8272E6B62111 /* LOTAnimatableLayer.h in Headers */, - 4645394224209282E792C8228848561A /* LOTAnimatableNumberValue.h in Headers */, - FEB78555B80D276710395DEC44F25AA1 /* LOTAnimatablePointValue.h in Headers */, - 519CD8089F30FF8AABBA56E5B09C0ECF /* LOTAnimatableScaleValue.h in Headers */, - 3236C440576B5350FF4A593329F6853A /* LOTAnimatableShapeValue.h in Headers */, - C29E25B80A96ACA26CCE93673192ABC2 /* LOTAnimatableValue.h in Headers */, - FE97A7C90BC2A392C0A8F6C352D752FD /* LOTAnimationCache.h in Headers */, - 26C9440B52690116EC8B5583F0792270 /* LOTAnimationTransitionController.h in Headers */, - 2304DD9022DA728FA4F1C242619ED8E8 /* LOTAnimationView.h in Headers */, - 3EFBE5FE5998D4937B80556EFE1C59ED /* LOTAnimationView_Compat.h in Headers */, - 1D8803B28867AACF30BEAF580A2DF6E2 /* LOTAnimationView_Internal.h in Headers */, - A060B1E8572EB3C4A45E936B2C232490 /* LOTAsset.h in Headers */, - 3E98915F4A3ED64F7600FA3CA4DBCBB9 /* LOTAssetGroup.h in Headers */, - E3DB9058B883A09E9670E04267466E2F /* LOTComposition.h in Headers */, - C5417A90C0FCB35821128AB8BFFB06B5 /* LOTCompositionLayer.h in Headers */, - AC8E8C240C9923BA68B34181E3DA0F4E /* LOTEllipseShapeLayer.h in Headers */, - B30AC34CC64ABFB82481BC632DC65EF3 /* LOTGroupLayerView.h in Headers */, - 59888D1D67B90D17D579CAD420BBB1D3 /* LOTHelpers.h in Headers */, - 33C655E1FF354F623C09FF35F7DAF83F /* LOTLayer.h in Headers */, - 77CED3A2EFBA61E4666214D9774322E9 /* LOTLayerGroup.h in Headers */, - 5550F613815068F9465F1BE65641363F /* LOTLayerView.h in Headers */, - A92A016B70A42200091761460C83691D /* LOTMask.h in Headers */, - 5159A8BF6ED533B289AA085AD982FCB4 /* LOTMaskLayer.h in Headers */, - 00ACA73AFF286C258694CEAE78733DB9 /* LOTModels.h in Headers */, - 2ACED1F66434F38B00C65BB20FCFB8D4 /* LOTPlatformCompat.h in Headers */, - BEB4C0D3644B65EBBCD21284D1ACB1A7 /* LOTRectShapeLayer.h in Headers */, - 7686B9EAE1AB4697AB736CE04191A77F /* LOTShapeCircle.h in Headers */, - 7D74C784331EF43CF0917B59586596AA /* LOTShapeFill.h in Headers */, - E69143ABDD76A4907A3D78D051BC875A /* LOTShapeGroup.h in Headers */, - CFA2199B9C373C9AD53086E40A8896A1 /* LOTShapeLayerView.h in Headers */, - 776C45A7FCBAE080154C39273751B3E7 /* LOTShapePath.h in Headers */, - 1B389642EC951667D3F5BC78CFF41267 /* LOTShapeRectangle.h in Headers */, - 22934177442B811EF33EE637DB0DD579 /* LOTShapeStroke.h in Headers */, - 7426A3BC35EA13C8E0616A474A1CDCE4 /* LOTShapeTransform.h in Headers */, - 663F4E5F9123B615097FC501305D5787 /* LOTShapeTrimPath.h in Headers */, - 91C45BA64B15E197015D1A50010CD33E /* LOTStrokeShapeLayer.h in Headers */, - ABA41BEBB6BFD056816073143938843A /* lottie-ios-iOS-umbrella.h in Headers */, - 5FA33F060560E3664F0B6D0B5BF9D4E7 /* Lottie.h in Headers */, - FBF3C04F748AD7F7941057D2F048989A /* NSValue+Compat.h in Headers */, - 3C9AC2905884330F880586A72C930A84 /* UIBezierPath.h in Headers */, - AE29F7571F5560DD0851A80DB1E3A46C /* UIColor+Expanded.h in Headers */, - A85F77090E5C021014481583E31FABAF /* UIColor.h in Headers */, + CFC690D4391D6AD027A3734C51661C5A /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, + ACA2800857E0A2A560EAE9EDB4F6E43B /* CADisplayLink.h in Headers */, + EBBC5C2C0BCE6D15577EFD566F4E0011 /* CALayer+Compat.h in Headers */, + 45EEA05A69040D8892BEACE0C687E82F /* CGGeometry+LOTAdditions.h in Headers */, + AAA8F43E56E5158CD59C3B56654EE67E /* LOTAnimatableBoundsValue.h in Headers */, + 9E68EB13B84BEF2301C3A78078C952E6 /* LOTAnimatableColorValue.h in Headers */, + 5C006EF8CE986CC7283DF7EA4629614A /* LOTAnimatableLayer.h in Headers */, + C3C4B197255276AC3CEA5DAA33A23DD4 /* LOTAnimatableNumberValue.h in Headers */, + EFECAE338D7ACD266907D2E1BB09F978 /* LOTAnimatablePointValue.h in Headers */, + B7BC95263EB29B7A9B8978E5015C5A38 /* LOTAnimatableScaleValue.h in Headers */, + 48445000D12A676012F62EE1C5EEF7FE /* LOTAnimatableShapeValue.h in Headers */, + 29CE796AA045B5AD804F77161A760A09 /* LOTAnimatableValue.h in Headers */, + B0553CD266848DDB09A5BD74E0C8C769 /* LOTAnimationCache.h in Headers */, + 7A303A7FCC0217F03B0D49045ADE58A9 /* LOTAnimationTransitionController.h in Headers */, + 0DB4B2887F111083A578332E81026C54 /* LOTAnimationView.h in Headers */, + 6006EAE95D9F915374278C0180B87579 /* LOTAnimationView_Compat.h in Headers */, + FD4D556664E89BECDC228B13F421DFCA /* LOTAnimationView_Internal.h in Headers */, + EEC7AEC4F97AC707312CE20BCD3EE60C /* LOTAnimatorNode.h in Headers */, + EE78E424DCF68133082A5C9AEF327941 /* LOTArrayInterpolator.h in Headers */, + E4B24295256BC54D5F651A1614E3B4AD /* LOTAsset.h in Headers */, + D67C110EC72BE1073C0FDD88D543CFA2 /* LOTAssetGroup.h in Headers */, + D9213B66B8F5C7C9070BCEF5C886E09A /* LOTBezierData.h in Headers */, + A4E1A498ACA6DEC0C4F6817FB099CA9D /* LOTBezierPath.h in Headers */, + A14ABD3667D5188383255171622740BE /* LOTCircleAnimator.h in Headers */, + 5EAEB286CA549282B1FA01D432FF13D0 /* LOTColorInterpolator.h in Headers */, + 229A640AACAE442C4D361AC4ED88FBD6 /* LOTComposition.h in Headers */, + 5FE1CC2F2702576116AB72181BF1D760 /* LOTCompositionContainer.h in Headers */, + 940543A8BC3A5177D8F66CF65E585B01 /* LOTCompositionLayer.h in Headers */, + 62F61E3FAB3036AAE9844FC1C2D4D814 /* LOTEllipseShapeLayer.h in Headers */, + F97C98621B35A0EB04F1792226429CEB /* LOTFillRenderer.h in Headers */, + EC81C1A8B51C2EE3C25A2CE3D5EBA807 /* LOTGradientFillRender.h in Headers */, + 7D80A52CADD8C796F91C07F50FE8502B /* LOTGroupLayerView.h in Headers */, + 0660C2F09502000A127447A25A98F149 /* LOTHelpers.h in Headers */, + 4AAED03BA02C00507FB73B9082813C95 /* LOTKeyframe.h in Headers */, + BF34096AD979C735443AE51A70092DE0 /* LOTLayer.h in Headers */, + 7D95736C9221AF5633FB73E53044594E /* LOTLayerContainer.h in Headers */, + 9CDCFEA637CE5EE2DD917F72F707AFF5 /* LOTLayerGroup.h in Headers */, + 0846E63E02F28D4497ED652FB550042B /* LOTLayerView.h in Headers */, + B283935B6B1B7997D907DE0E79AA7502 /* LOTMask.h in Headers */, + 846C3BAAA8242AF239330C04F9FF5237 /* LOTMaskContainer.h in Headers */, + 9EAB70B4C54447780D0C08CA06850C67 /* LOTMaskLayer.h in Headers */, + C7D53C6D1CE442FC00397C6001016ED0 /* LOTModels.h in Headers */, + E97E5DC2989FE6ACB6EA07854DFB0E42 /* LOTNumberInterpolator.h in Headers */, + 5E687BBFDCFAE4697162F151D1F3C6BE /* LOTPathAnimator.h in Headers */, + 4FE7C0557B031072A72BD08EFE9BFDD1 /* LOTPathInterpolator.h in Headers */, + A4B2F4F9C9BBCFCE7B52B2136C6EF738 /* LOTPlatformCompat.h in Headers */, + 3AAB5152044505FC0419ED1DE11872E9 /* LOTPointInterpolator.h in Headers */, + 714570634F714C9BCAB992BDF848733B /* LOTPolygonAnimator.h in Headers */, + 9FC234950B0C67864B29B08FE5CA627F /* LOTPolystarAnimator.h in Headers */, + 47C17559034BDCF81A01733A083BD8F2 /* LOTRectInterpolator.h in Headers */, + 57A8EC974D054B971501319BA567AB08 /* LOTRectShapeLayer.h in Headers */, + EFD4F4A85830AC8AFFBFA6916AE9544C /* LOTRenderGroup.h in Headers */, + 4AED9ECE624255896BD8D181E47572C6 /* LOTRenderNode.h in Headers */, + 68BFFFD7320B5D67FAB7FA5EFFCB216D /* LOTRepeaterRenderer.h in Headers */, + 7276909122AD5C0DB0847DD10E820060 /* LOTRoundedRectAnimator.h in Headers */, + 73F8E25DC0CC2902492CA680FE07360D /* LOTShapeCircle.h in Headers */, + 3117F39877B6F22718B64E952ADB8AAD /* LOTShapeFill.h in Headers */, + 7F4F6A03F0FF5BC54B47ED81BE8A7411 /* LOTShapeGradientFill.h in Headers */, + A887ECC5961C305A8DD5D480B3418F78 /* LOTShapeGroup.h in Headers */, + FD755E13EAF481CB4687EC7532409035 /* LOTShapeLayerView.h in Headers */, + 1390AF1B3A49C5225BB378E048211213 /* LOTShapePath.h in Headers */, + 97A33C9E3814A699D4A7D4F497EF3C98 /* LOTShapeRectangle.h in Headers */, + C89685FF0607903273D4AF3832C981EF /* LOTShapeRepeater.h in Headers */, + 18DB15626661FD19FA24586BD77BE6A9 /* LOTShapeStar.h in Headers */, + 8C130492F1CB78D926D411B3A17FE9E2 /* LOTShapeStroke.h in Headers */, + 5C9D73D05443D31C1C45F360DC21F79F /* LOTShapeTransform.h in Headers */, + 26A7495AF51DACDC4C1D273528449646 /* LOTShapeTrimPath.h in Headers */, + 322676880F9CBDE7D3C9FB39987FB016 /* LOTSizeInterpolator.h in Headers */, + C66C67C3F6C2EF798C67D20BEE225BBF /* LOTStrokeRenderer.h in Headers */, + 1ED1A60D3B8521C32DEA8DF81FBE4509 /* LOTStrokeShapeLayer.h in Headers */, + DB7B79F2DE2BE36C0AF77BF088245BC5 /* lottie-ios-OSX-umbrella.h in Headers */, + B089FBF5EAECEB8BB8B2DF5D766630C8 /* Lottie.h in Headers */, + B3E3AE44D058B984551C6526D3FC6FBF /* LOTTransformInterpolator.h in Headers */, + 37C2C6885744FB8D93FAD75547D0803A /* LOTTrimPathNode.h in Headers */, + CCFF968E209FCD1A38A87070B0D55A27 /* LOTValueInterpolator.h in Headers */, + 4BCC5013001FC33D5C4FCF9633649C91 /* NSValue+Compat.h in Headers */, + D019FC221D274293D263106EA798DA75 /* UIBezierPath.h in Headers */, + 0636DDB91687977122626E0F4F3E898F /* UIColor+Expanded.h in Headers */, + 3D8C83712F0A3E0EDA42F41471B2F4C4 /* UIColor.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -885,39 +1250,39 @@ productReference = 38B1EFB75C34BAD5A5CA0B1864428B42 /* Pods_Lottie_Example.framework */; productType = "com.apple.product-type.framework"; }; - 4C337DE3217726D808920EB421756F9A /* Pods-Lottie-Example-MacOS */ = { + 3D260FCD19802BD64B1073C14F2893F9 /* lottie-ios-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = E98FEEC9B59E72A12C3ABC5B058F4108 /* Build configuration list for PBXNativeTarget "Pods-Lottie-Example-MacOS" */; + buildConfigurationList = 86D670C50239D367E30AD3A8A357DD96 /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */; buildPhases = ( - 7EF0A56B7F1C81CBD6014D75342B084B /* Sources */, - 1075D2ED1548A02B2E1ED8F45B7B1A28 /* Frameworks */, - 6D387232BA3FD4B5B0712B70F73F734B /* Headers */, + 8382675C236824F21024F3B163386C26 /* Sources */, + B76496579C2EA13957AEB26BBEF4EBEC /* Frameworks */, + 93BAE48FB1F6FF4712C625A510BB9F13 /* Headers */, ); buildRules = ( ); dependencies = ( - 0C6AFC2DFAC60CAD0603A91B0D2D9372 /* PBXTargetDependency */, ); - name = "Pods-Lottie-Example-MacOS"; - productName = "Pods-Lottie-Example-MacOS"; - productReference = A8B7943757B6273E76BA0133FF4C7DCD /* Pods_Lottie_Example_MacOS.framework */; + name = "lottie-ios-iOS"; + productName = "lottie-ios-iOS"; + productReference = 8A2B53D7CFE2D3FE84ABAC705C3CF685 /* Lottie.framework */; productType = "com.apple.product-type.framework"; }; - 67E1D3D063C8D633198AFE4F109B57BE /* lottie-ios-iOS */ = { + 4C337DE3217726D808920EB421756F9A /* Pods-Lottie-Example-MacOS */ = { isa = PBXNativeTarget; - buildConfigurationList = AF6EB9BB8893935A17B7D6E0B0B4799B /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */; + buildConfigurationList = E98FEEC9B59E72A12C3ABC5B058F4108 /* Build configuration list for PBXNativeTarget "Pods-Lottie-Example-MacOS" */; buildPhases = ( - E01B3E72492D64E42B92C90E206F391D /* Sources */, - F15C037E41BFA0D00A400FCDE5043C99 /* Frameworks */, - C8717807711221AEA6097B65A67F96C2 /* Headers */, + 7EF0A56B7F1C81CBD6014D75342B084B /* Sources */, + 1075D2ED1548A02B2E1ED8F45B7B1A28 /* Frameworks */, + 6D387232BA3FD4B5B0712B70F73F734B /* Headers */, ); buildRules = ( ); dependencies = ( + 0C6AFC2DFAC60CAD0603A91B0D2D9372 /* PBXTargetDependency */, ); - name = "lottie-ios-iOS"; - productName = "lottie-ios-iOS"; - productReference = 8A2B53D7CFE2D3FE84ABAC705C3CF685 /* Lottie.framework */; + name = "Pods-Lottie-Example-MacOS"; + productName = "Pods-Lottie-Example-MacOS"; + productReference = A8B7943757B6273E76BA0133FF4C7DCD /* Pods_Lottie_Example_MacOS.framework */; productType = "com.apple.product-type.framework"; }; 83ADD99A263B92A7CBD14D1B3DBE0C7B /* Pods-lottie-ios_Tests */ = { @@ -937,13 +1302,13 @@ productReference = 0A96091EB00499090690B5654D9CCF82 /* Pods_lottie_ios_Tests.framework */; productType = "com.apple.product-type.framework"; }; - B35FB2D3A4FFEC4F1B73BD07D0422650 /* lottie-ios-OSX */ = { + D421BDA10EC5F10FD74217C3532136BB /* lottie-ios-OSX */ = { isa = PBXNativeTarget; - buildConfigurationList = 0159E28B5FAC65809CFD5D2E92DF1184 /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */; + buildConfigurationList = D264C1C1E79EDA6463270109702E568F /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */; buildPhases = ( - D91D60C940F49F62ADDA1716030E2216 /* Sources */, - 17311B0686DA97F8C8A8E9EBFCBC4DB4 /* Frameworks */, - 396107498C43BAE122604759230494C3 /* Headers */, + 838FAA6740B1699FB155DE11F8D705D7 /* Sources */, + E5A2E846675A5E05C6D906B9F5A7E771 /* Frameworks */, + AE43AD1A29681FACD8AD7816620787AC /* Headers */, ); buildRules = ( ); @@ -975,8 +1340,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 67E1D3D063C8D633198AFE4F109B57BE /* lottie-ios-iOS */, - B35FB2D3A4FFEC4F1B73BD07D0422650 /* lottie-ios-OSX */, + 3D260FCD19802BD64B1073C14F2893F9 /* lottie-ios-iOS */, + D421BDA10EC5F10FD74217C3532136BB /* lottie-ios-OSX */, 2095D67C1D81E0F861D9AC87B89BF033 /* Pods-Lottie-Example */, 4C337DE3217726D808920EB421756F9A /* Pods-Lottie-Example-MacOS */, 83ADD99A263B92A7CBD14D1B3DBE0C7B /* Pods-lottie-ios_Tests */, @@ -1009,99 +1374,161 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D91D60C940F49F62ADDA1716030E2216 /* Sources */ = { + 8382675C236824F21024F3B163386C26 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A3242B22DFA7F8C3B57CCAFA311C8B5D /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, - A3B0E8880A7A283A62D745BA0B445350 /* CADisplayLink.m in Sources */, - AA51053B092DA39EB814D8E428D8D9ED /* CALayer+Compat.m in Sources */, - 322E5133126F887A9EF509F772AE1980 /* CGGeometry+LOTAdditions.m in Sources */, - E70087B04DE7E4B0C77033044BEBC4D9 /* LOTAnimatableBoundsValue.m in Sources */, - F36785B097644D2C3F87EC8ED358119F /* LOTAnimatableColorValue.m in Sources */, - C2C5C70AE17E4B478F15222AF2E874AA /* LOTAnimatableLayer.m in Sources */, - 32342A5FF16875CBF87BC0F6FAB99665 /* LOTAnimatableNumberValue.m in Sources */, - 34E4D2CD05189832B9A9EB0A130C678C /* LOTAnimatablePointValue.m in Sources */, - E21B097C2B266976BEF80D5BE101D122 /* LOTAnimatableScaleValue.m in Sources */, - B8DD47F763F17AC3EEBC8C524C8071E4 /* LOTAnimatableShapeValue.m in Sources */, - 64A1F81854F150AEA285EEE3DDC437AD /* LOTAnimationCache.m in Sources */, - C60676E5E8A0776E49069A1F70D7D2AD /* LOTAnimationView.m in Sources */, - 5CB529DF9A7C1B9BEF528941C68F1E53 /* LOTAsset.m in Sources */, - 515A957A190713424E7F402F3E17CB8B /* LOTAssetGroup.m in Sources */, - DB3D8590C5A7A6DAE41D1BA51479FB46 /* LOTComposition.m in Sources */, - 55096D1BC2001E5C4C49D28912CFC52D /* LOTCompositionLayer.m in Sources */, - D6C98639C9E00A3822AE350D4EDE2D73 /* LOTEllipseShapeLayer.m in Sources */, - 17E30E4F832BEEA12DA5340B6EEB5CC5 /* LOTGroupLayerView.m in Sources */, - 6114612EA4D13ECBA52BEE27D01CE766 /* LOTLayer.m in Sources */, - DB3B48F0A33001AD65B5FCD0B2F0BE26 /* LOTLayerGroup.m in Sources */, - CB2187A2B993E225FF910904155699C8 /* LOTLayerView.m in Sources */, - 7411FFC4811939A68D17A43A2B1D0BFA /* LOTMask.m in Sources */, - D2BD8F4BB91D28EAEBDEA55C480B6539 /* LOTMaskLayer.m in Sources */, - 3E39F7B76CE8E5E9CE845190A034796F /* LOTRectShapeLayer.m in Sources */, - 5BD63C7A427B0F888A8B0A3C6CC4CDA9 /* LOTShapeCircle.m in Sources */, - 38AB672AAB18F711CD611EBD8FEAD1AD /* LOTShapeFill.m in Sources */, - 199226E869357BD58701ED83BB5AE20B /* LOTShapeGroup.m in Sources */, - 4883E5701E68D84600027E57 /* LOTAnimationTransitionController.m in Sources */, - 6122543A141FDD8065E799AB13F4CF66 /* LOTShapeLayerView.m in Sources */, - C52DD252E40E711591971743588BD38E /* LOTShapePath.m in Sources */, - EADCF40A64C4D1F8273CF423FA7E65C7 /* LOTShapeRectangle.m in Sources */, - 9895A16AAE72E184312420AB7AE8ACDE /* LOTShapeStroke.m in Sources */, - 7AEAC4C9E4D17A246B86DE3E08CB1E21 /* LOTShapeTransform.m in Sources */, - B92364BBEB17FA96D2F63AB7FB0AA80F /* LOTShapeTrimPath.m in Sources */, - C5C25B48916F7BFFBC0B73C6EEF96608 /* LOTStrokeShapeLayer.m in Sources */, - 1ADA8883596CBB8F7F605A24C7366B5E /* lottie-ios-OSX-dummy.m in Sources */, - CF4A52F8F586302659DC0574DAD7415A /* NSValue+Compat.m in Sources */, - 17EAC837F71A0005CAB6DD9573D39409 /* UIBezierPath.m in Sources */, - 2F1661DB707B76D51664D8EC801670D4 /* UIColor+Expanded.m in Sources */, - 03A6FDEED67E116DE6C1A75D73770C9B /* UIColor.m in Sources */, + 514C8A5124D34B07833106D01704A5F2 /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, + D0EEBA5BAEDC37BBB678684ADB682B84 /* CADisplayLink.m in Sources */, + B0D1722CBC46068C053C4699B9A37098 /* CALayer+Compat.m in Sources */, + B132389B22FD2F95AF18628D1411789E /* CGGeometry+LOTAdditions.m in Sources */, + 9AD759BE2DF752D7A4F32F78837E2057 /* LOTAnimatableBoundsValue.m in Sources */, + 982647C811D75654E610C4B5805E44AC /* LOTAnimatableColorValue.m in Sources */, + 93817CD8DDA01E779B83400BE8033477 /* LOTAnimatableLayer.m in Sources */, + EBD3CA48EF745A3A19BBB73102F13B62 /* LOTAnimatableNumberValue.m in Sources */, + 7C9701AF0C76E11094ABAC992C0C7C5C /* LOTAnimatablePointValue.m in Sources */, + 96677C34F9C07076B602171E63D518C8 /* LOTAnimatableScaleValue.m in Sources */, + 4A8488AD7F1548BDDF9970DB2803A640 /* LOTAnimatableShapeValue.m in Sources */, + 8F1740A13412540A72D2DFF2A57905AA /* LOTAnimationCache.m in Sources */, + D893DE63B1CAD5325C47CC04D0C2F416 /* LOTAnimationTransitionController.m in Sources */, + 38EB869790AA3DE87F79D8F468068AED /* LOTAnimationView.m in Sources */, + 6EF2171DBED293EB6014EBC73519D092 /* LOTAnimatorNode.m in Sources */, + E8301FAEE7C77E1C59B70FB4ED394488 /* LOTArrayInterpolator.m in Sources */, + 05D1A1AA0FEC0FEEF0ABA9A27D61BA39 /* LOTAsset.m in Sources */, + 5FEFC8B5AB0115C6B49F88B553351B2D /* LOTAssetGroup.m in Sources */, + 35226F11EBF10947441AF3F4ED5F23C5 /* LOTBezierData.m in Sources */, + 37EA6A084060F03A7D70AF8999DDBE7A /* LOTBezierPath.m in Sources */, + 1C0139B2AAA0CBFD0FC7224FE7D0CA54 /* LOTCircleAnimator.m in Sources */, + B455A445D007D25ACE59F2A1CFF3AE23 /* LOTColorInterpolator.m in Sources */, + CB4752F62DFDB69108F4D68B81F465BB /* LOTComposition.m in Sources */, + 19F9CC9C13DDBBD01C220156FBBAC125 /* LOTCompositionContainer.m in Sources */, + 337357CBDA4F5AE42E5B14F8B354BC84 /* LOTCompositionLayer.m in Sources */, + 07CA70F3CE9BD6F37881055453755C87 /* LOTEllipseShapeLayer.m in Sources */, + 6E3DEBD95752E200627094E08A49DB35 /* LOTFillRenderer.m in Sources */, + AD38EC0BA051034386155C7DF01C82E7 /* LOTGradientFillRender.m in Sources */, + 3E735014EDB9A8CF1E92F699778F44D3 /* LOTGroupLayerView.m in Sources */, + 1A853C5169F12E1960F312DD26B4F34F /* LOTKeyframe.m in Sources */, + 765D5074C9926363FA1B681704C262F1 /* LOTLayer.m in Sources */, + B2546FD3BCAB7490562602837C14528F /* LOTLayerContainer.m in Sources */, + A0EB3004EDA1415CE464B212F9CFD421 /* LOTLayerGroup.m in Sources */, + 83002E0B6DF711DCE967F8AB8E8C6723 /* LOTLayerView.m in Sources */, + A885AD4124E79A6E702F8F0D05E03BE7 /* LOTMask.m in Sources */, + 13018C0A28AE8F0AE3A3A4DB1E111AA9 /* LOTMaskContainer.m in Sources */, + 56604C133D97B4CD9FC0EFCC9D6A0592 /* LOTMaskLayer.m in Sources */, + 0F54AB30AC85B9131E2F91D2B40050CF /* LOTNumberInterpolator.m in Sources */, + FC54F6F0F4F34F0C6A6F8C5D645E2C0C /* LOTPathAnimator.m in Sources */, + AE15FD0D67437DA83A8E301C8B7151B3 /* LOTPathInterpolator.m in Sources */, + E540B01A9E77A420472ED0A47AA78B3E /* LOTPointInterpolator.m in Sources */, + 1D8C1FCA760D0382099BF1ECC75766D8 /* LOTPolygonAnimator.m in Sources */, + 89C4E86AACBF8DB541406213C75B3194 /* LOTPolystarAnimator.m in Sources */, + 9BD056D38E61E50CA77702D90E73694A /* LOTRectInterpolator.m in Sources */, + 253D4C6506C03DFFAE75A2B92F2B22C4 /* LOTRectShapeLayer.m in Sources */, + 6F5D6A6855C5307599D0099105CAD6DE /* LOTRenderGroup.m in Sources */, + BA48C0E2BE1B4204A258B0FD109E6002 /* LOTRenderNode.m in Sources */, + 1505F101FC841119C415133AA8E4790A /* LOTRepeaterRenderer.m in Sources */, + 26EC2A5DABDE376051EBC57DDE1F67E8 /* LOTRoundedRectAnimator.m in Sources */, + 24B56187FF109D1B8D33FDA8C4D54C44 /* LOTShapeCircle.m in Sources */, + C24960CCB17800ADE5D01B5C97B24FF4 /* LOTShapeFill.m in Sources */, + DAECE1256E4CABAD47BA36FB4F77BEF8 /* LOTShapeGradientFill.m in Sources */, + 276CBF965D02301E5A0F820AD63183E5 /* LOTShapeGroup.m in Sources */, + 518A13576853C3AB08824FDFC2863808 /* LOTShapeLayerView.m in Sources */, + 2409A8B240AABC4D2BA49E8964C854F4 /* LOTShapePath.m in Sources */, + 5A94B27C1718948EBAD42BD95ACF2DB1 /* LOTShapeRectangle.m in Sources */, + 03C61D00F7B3511ADBA0E133008D9645 /* LOTShapeRepeater.m in Sources */, + 9CC9A99330E4D53C21100256E0C0993F /* LOTShapeStar.m in Sources */, + 50B11C5938D460A7E2DF8A196038499A /* LOTShapeStroke.m in Sources */, + 319A449DE71CBA09F9A1871F85FA2CDA /* LOTShapeTransform.m in Sources */, + 47723D618F2CBB296B0263788A2FAFE9 /* LOTShapeTrimPath.m in Sources */, + C79D1DC6657A7D2C5E1D0D79DA4C907C /* LOTSizeInterpolator.m in Sources */, + CF99297D94D1853C908DDBA72A430FCF /* LOTStrokeRenderer.m in Sources */, + 5B13E2C93CCFEE479FB870D0D98EEC9C /* LOTStrokeShapeLayer.m in Sources */, + 8C6ED0F5BDB88979EB7158C91CAA31EE /* lottie-ios-iOS-dummy.m in Sources */, + AAE918B2A747B5051D1CC0C86266A887 /* LOTTransformInterpolator.m in Sources */, + 1A20ED2CD5B13C908B8E8117E0FA9AA5 /* LOTTrimPathNode.m in Sources */, + 6F167BEA4489FCC92ADD64A44D2301C4 /* LOTValueInterpolator.m in Sources */, + 71D3B0781F64F773BAC62ACA2E8FCA6C /* NSValue+Compat.m in Sources */, + 520BF95322EB2209677D4A0FFC3A22D4 /* UIBezierPath.m in Sources */, + BBB041289FB3E4FB3E7BDE3F4D5A7FB0 /* UIColor+Expanded.m in Sources */, + 31924E1CA741A3B8CB9B0726DF25C205 /* UIColor.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E01B3E72492D64E42B92C90E206F391D /* Sources */ = { + 838FAA6740B1699FB155DE11F8D705D7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0598314D349CD9F818CAD8F20BC6CC9A /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, - B27312E7F26EDF9988F5B1A42F1069B0 /* CADisplayLink.m in Sources */, - 8E145139B894C20F2E39E16E8BB35F0C /* CALayer+Compat.m in Sources */, - 64610B08EA3E16D78270D3D0DFE5CBB8 /* CGGeometry+LOTAdditions.m in Sources */, - 2657BC24AF6F7BDA84A606A3CF42CA16 /* LOTAnimatableBoundsValue.m in Sources */, - EC978DD494AFD18A825AE21229F65A55 /* LOTAnimatableColorValue.m in Sources */, - 81CDE43E52520E629B57C4F7EF9A2BE1 /* LOTAnimatableLayer.m in Sources */, - AB89E5F56D950FADCBCEEDC447E2912D /* LOTAnimatableNumberValue.m in Sources */, - DDCBBFB6FDDF57ADF4D7F33FB1615619 /* LOTAnimatablePointValue.m in Sources */, - EDF25CA451639F71ADB4B9529791FA33 /* LOTAnimatableScaleValue.m in Sources */, - 756A97B96D7D6E00B01B75785F63761C /* LOTAnimatableShapeValue.m in Sources */, - 3A01E890B082E29BC3E2B6AC05FA6310 /* LOTAnimationCache.m in Sources */, - 16196C32B4839D7178B241E1F6204B82 /* LOTAnimationTransitionController.m in Sources */, - C4C2F19FF9C5DE298DD84E5A428D7698 /* LOTAnimationView.m in Sources */, - 852379BDF000E374768FEA270C55CCB1 /* LOTAsset.m in Sources */, - 601B713FD106CF6886088141B1759314 /* LOTAssetGroup.m in Sources */, - 836ED9462A5D5E630D582FFDF447D08C /* LOTComposition.m in Sources */, - 102E32591CDD3DB9BEC5AECC2278CE15 /* LOTCompositionLayer.m in Sources */, - 816E83627E0EF1AE79B562E8A35A6D52 /* LOTEllipseShapeLayer.m in Sources */, - 0050118F75A07FBD8A6FB85FF7F78ED9 /* LOTGroupLayerView.m in Sources */, - 55B1C043E33F6CADC4E08BE24A165B91 /* LOTLayer.m in Sources */, - F6D3DCAC44CEB866AD74070664710DCE /* LOTLayerGroup.m in Sources */, - 2E9DFD121168327055EE215DCBED608F /* LOTLayerView.m in Sources */, - FB38314EF920377433F14C6A9FED03CE /* LOTMask.m in Sources */, - 76ADD94CD6300AB4B72ACA5D603F223E /* LOTMaskLayer.m in Sources */, - D3231EFA8EAB066FB606EA8C677AEE61 /* LOTRectShapeLayer.m in Sources */, - EC529EBE2C8F87185A4516A0E9E11F03 /* LOTShapeCircle.m in Sources */, - 8D16A1F3DEB3157FD40DCF240D9B0E7C /* LOTShapeFill.m in Sources */, - 47D7E761E2AE4DED71C15463FD060CA7 /* LOTShapeGroup.m in Sources */, - 5BE228F0C3944C76871A60CD99101A71 /* LOTShapeLayerView.m in Sources */, - 815605CDA4B94BF088A86C35A4CED0BF /* LOTShapePath.m in Sources */, - 734A160E17B2F3B0DE0F6ED67CA3C3E9 /* LOTShapeRectangle.m in Sources */, - 2EA52A0E1054E433EE47665D3C7D0291 /* LOTShapeStroke.m in Sources */, - 0F6300332B3B5A3A4F595FA5FF0681E1 /* LOTShapeTransform.m in Sources */, - 57620F2816A0D5DC06D6B6A00787EC30 /* LOTShapeTrimPath.m in Sources */, - 538D2B7C257BADD5A7A71896DC79BAF9 /* LOTStrokeShapeLayer.m in Sources */, - DF950CF66F9483D7D1B147A7871358D6 /* lottie-ios-iOS-dummy.m in Sources */, - 028F052FF06EE9BBEA2F6CDA1C794B42 /* NSValue+Compat.m in Sources */, - F95765A052FB04968576F3D23ACA744E /* UIBezierPath.m in Sources */, - B5834C885C78105EAFB41B4F25F89198 /* UIColor+Expanded.m in Sources */, - DB2EE5D0A86B85CA39232C77FBD7D456 /* UIColor.m in Sources */, + 17099FA6A2D94A7A8617BF4106AC3A13 /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, + 6A34BD5B4F29770E76222C86EC329DC8 /* CADisplayLink.m in Sources */, + A6F86852D058121992AF602A3368C371 /* CALayer+Compat.m in Sources */, + B855044D86DF4405CD6DFCB83B9B1D0E /* CGGeometry+LOTAdditions.m in Sources */, + 38A76BAD1B166DFC9ABEB7E0999D795C /* LOTAnimatableBoundsValue.m in Sources */, + 4198F2AC553CBB43BBA817C3014152CE /* LOTAnimatableColorValue.m in Sources */, + 3E0465C04328E570C9C6C70A77852CDC /* LOTAnimatableLayer.m in Sources */, + 55AF3A6C29534493B940DED7956EA08C /* LOTAnimatableNumberValue.m in Sources */, + 3FB98EAB76B1D222743621D7F896BC59 /* LOTAnimatablePointValue.m in Sources */, + 95B3411D4D9687C87979DF24FA1FF7C7 /* LOTAnimatableScaleValue.m in Sources */, + F0D6FD2C46149FF5F2B6204BBB13B8BD /* LOTAnimatableShapeValue.m in Sources */, + BBD5328DEAD1884DF9A8EFDDF8A92433 /* LOTAnimationCache.m in Sources */, + BB794B47D6867C7C482C8841C817ADFD /* LOTAnimationTransitionController.m in Sources */, + 6DD667989E1484D1B7B44E937BEDB591 /* LOTAnimationView.m in Sources */, + B9366E6FD604B869170E80178624A568 /* LOTAnimatorNode.m in Sources */, + FF419F9CF364AD2819C2469C989197A9 /* LOTArrayInterpolator.m in Sources */, + 98BB2D16A81BF4BA7B1965D069A7FCE6 /* LOTAsset.m in Sources */, + 5E2D6A8BAE8B343307DC3104441A994B /* LOTAssetGroup.m in Sources */, + 36957EBED06C6F51845138938999F94F /* LOTBezierData.m in Sources */, + 9FF441081A60EF526F5C33F467947B74 /* LOTBezierPath.m in Sources */, + 8E31CEC84F64BF0B783B4071E82B6D20 /* LOTCircleAnimator.m in Sources */, + D3222B4F1C796A1ED42BB5C09A094210 /* LOTColorInterpolator.m in Sources */, + 7075E1B6967475C7E75D4C1148CE140A /* LOTComposition.m in Sources */, + 0B3F2352C5C5E4476F2C4DD72B4D146F /* LOTCompositionContainer.m in Sources */, + 3F75663A1A9F066CBDCC0F7C5E7F48AA /* LOTCompositionLayer.m in Sources */, + 0E2A99564583095A5793CC2700E71D35 /* LOTEllipseShapeLayer.m in Sources */, + 8A48DA3B7DE051CE2050ED5305436BEA /* LOTFillRenderer.m in Sources */, + C79E55630F9044CF1C8EF01805D2A16B /* LOTGradientFillRender.m in Sources */, + 91A296720DB58A09B2321449FF95211D /* LOTGroupLayerView.m in Sources */, + 95C6A09F62DCBA2C50ECF4076FA3D22F /* LOTKeyframe.m in Sources */, + 67EAA8CF3A2A489C3F7BF2620BE8482D /* LOTLayer.m in Sources */, + 68A5E7B6436C936D491684079A7EA75D /* LOTLayerContainer.m in Sources */, + 80EE6155F5F94155C91035A32EFFE359 /* LOTLayerGroup.m in Sources */, + FDEF60B591C8642B2427AC4B818B11A6 /* LOTLayerView.m in Sources */, + A763BB00A1CEC68C45F1D39D7D0593FB /* LOTMask.m in Sources */, + CF7C0363EA545D52B7C6AC720116A396 /* LOTMaskContainer.m in Sources */, + 337D6CB1EC23EEAD83CD7242385EE2E5 /* LOTMaskLayer.m in Sources */, + EADB465AF060AC9DFD782103C0FB10D2 /* LOTNumberInterpolator.m in Sources */, + 4C23953476BB3BA7CF4C801239BCBC5A /* LOTPathAnimator.m in Sources */, + 3E8438C2D01BFF9F13B6256477F996E6 /* LOTPathInterpolator.m in Sources */, + A5EF11D0711FF8D377740156CB957BE0 /* LOTPointInterpolator.m in Sources */, + 60EA2AF78B44CFD4E4AA7826952F4ACB /* LOTPolygonAnimator.m in Sources */, + 649756610D49C44F62524EA678CC501A /* LOTPolystarAnimator.m in Sources */, + 0F83F8CF23761036BA313EF823CA1AE1 /* LOTRectInterpolator.m in Sources */, + 7B43D7B683733528AC2335AF7D078F40 /* LOTRectShapeLayer.m in Sources */, + 01715488E9D85646866EB4D366DB8C23 /* LOTRenderGroup.m in Sources */, + FB791F68428A861FC183555B39C8B805 /* LOTRenderNode.m in Sources */, + 6CF9B85D3E2A82F6F2A5CBD3BEBDB876 /* LOTRepeaterRenderer.m in Sources */, + D318F1B5F5DC22C7DCA4851671E5DA0E /* LOTRoundedRectAnimator.m in Sources */, + B16F75126392DFD319B9D0FA951318E4 /* LOTShapeCircle.m in Sources */, + 3A06BF115985F97F41352DBF6FA2D714 /* LOTShapeFill.m in Sources */, + 11249B63480418B1EF0F47BCFAF6FC88 /* LOTShapeGradientFill.m in Sources */, + A0DA32D87D19A22CA995D9034345A7C0 /* LOTShapeGroup.m in Sources */, + ABC72214ECF3974AF12735A4329206F7 /* LOTShapeLayerView.m in Sources */, + D9EDFDAC0D82F5F08BD7545666110D15 /* LOTShapePath.m in Sources */, + 4A807433B3E0B61648CFB862E6399A82 /* LOTShapeRectangle.m in Sources */, + DD7C032C9739CA60EAEF7CCD8C4EDC96 /* LOTShapeRepeater.m in Sources */, + 3E9AF6D8163133C1F8D05AD6DADDF860 /* LOTShapeStar.m in Sources */, + 8219D218F8490A168D1D755324337B61 /* LOTShapeStroke.m in Sources */, + 708D62C125905EBC4CCD0A51F6324D0E /* LOTShapeTransform.m in Sources */, + 499EC7AA44A86F2BE607C7F515219A93 /* LOTShapeTrimPath.m in Sources */, + A4822D3D61C8A09B0EFA5456C3BBCD20 /* LOTSizeInterpolator.m in Sources */, + 22062EED1FA0038EE210F420519F5957 /* LOTStrokeRenderer.m in Sources */, + A502BB5CADBC332558590363C18FEDA1 /* LOTStrokeShapeLayer.m in Sources */, + 3372C0BD9E8D42B77BC8AD0F1B04DAA1 /* lottie-ios-OSX-dummy.m in Sources */, + 9279992E9DAC0486BFE021752023AA14 /* LOTTransformInterpolator.m in Sources */, + 439C991041031F38EE7FE60A3D1B7E05 /* LOTTrimPathNode.m in Sources */, + C366090D6C389DF3D1ADEBB14371452C /* LOTValueInterpolator.m in Sources */, + 996F2C1E7DF9422E12DB0C06014279E3 /* NSValue+Compat.m in Sources */, + 24159836244FE045ADB1D6E1BA1D48BC /* UIBezierPath.m in Sources */, + B102DEA84908EA842534A74EC79613C0 /* UIColor+Expanded.m in Sources */, + 0AB95A613B2441FEE5C497FCEEE27EFC /* UIColor.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1111,62 +1538,21 @@ 0C6AFC2DFAC60CAD0603A91B0D2D9372 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "lottie-ios-OSX"; - target = B35FB2D3A4FFEC4F1B73BD07D0422650 /* lottie-ios-OSX */; + target = D421BDA10EC5F10FD74217C3532136BB /* lottie-ios-OSX */; targetProxy = 34EEF95B8289340A35BC99154B25CCE9 /* PBXContainerItemProxy */; }; AD2FBD63A30D0AC75A11104406DB3C3C /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "lottie-ios-iOS"; - target = 67E1D3D063C8D633198AFE4F109B57BE /* lottie-ios-iOS */; + target = 3D260FCD19802BD64B1073C14F2893F9 /* lottie-ios-iOS */; targetProxy = 68E1DE604219B922CE07CE2003EA0EA3 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 32785CED8F165332830702913AE5F655 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3F0D93F269A375B707839F7A63782239 /* Debug */ = { + 1846A7490ED6A12DF3C187C8C3EDC2A1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C9A0BB696DAB4D23402E4F92E8A879B0 /* Pods-Lottie-Example.debug.xcconfig */; + baseConfigurationReference = D01C3D077402D16057DAEA57E91EFD7D /* Pods-lottie-ios_Tests.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1179,18 +1565,18 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Lottie-Example/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-lottie-ios_Tests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Lottie-Example/Pods-Lottie-Example.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-lottie-ios_Tests/Pods-lottie-ios_Tests.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Lottie_Example; + PRODUCT_NAME = Pods_lottie_ios_Tests; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1199,15 +1585,13 @@ }; name = Debug; }; - 459B48F6F5A532D166BB404775044A50 /* Release */ = { + 32162350FFFB1488E85C9CB42B04D4F0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 691E5DA7E296E61F6161698A496BC899 /* Pods-Lottie-Example-MacOS.release.xcconfig */; + baseConfigurationReference = 7421CFD687F17710731C740FFE50CF08 /* Pods-Lottie-Example.release.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; @@ -1215,36 +1599,36 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Lottie-Example-MacOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Lottie-Example/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/Pods-Lottie-Example-MacOS/Pods-Lottie-Example-MacOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Lottie-Example/Pods-Lottie-Example.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Lottie_Example_MacOS; - SDKROOT = macosx; + PRODUCT_NAME = Pods_Lottie_Example; + SDKROOT = iphoneos; SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 68D57A1C80CE60FD73A64DA126BCBCC3 /* Debug */ = { + 3500D0596C9BE18F53FE5C2A22B7381E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D01C3D077402D16057DAEA57E91EFD7D /* Pods-lottie-ios_Tests.debug.xcconfig */; + baseConfigurationReference = 066BD868B309BB71008F48B50699E933 /* Pods-lottie-ios_Tests.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -1253,11 +1637,11 @@ GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Target Support Files/Pods-lottie-ios_Tests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-lottie-ios_Tests/Pods-lottie-ios_Tests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -1269,60 +1653,17 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - 7343155173797CF1E365D82338A7368C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - MACOSX_DEPLOYMENT_TARGET = 10.10; - ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; + name = Release; }; - 960615A6B5F8AF503B092AB163F6AC5B /* Release */ = { + 459B48F6F5A532D166BB404775044A50 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 066BD868B309BB71008F48B50699E933 /* Pods-lottie-ios_Tests.release.xcconfig */; + baseConfigurationReference = 691E5DA7E296E61F6161698A496BC899 /* Pods-Lottie-Example-MacOS.release.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; @@ -1330,30 +1671,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-lottie-ios_Tests/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Lottie-Example-MacOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-lottie-ios_Tests/Pods-lottie-ios_Tests.modulemap"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Pods-Lottie-Example-MacOS/Pods-Lottie-Example-MacOS.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_lottie_ios_Tests; - SDKROOT = iphoneos; + PRODUCT_NAME = Pods_Lottie_Example_MacOS; + SDKROOT = macosx; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 982DC93203668F585D8908E81D51F0C6 /* Debug */ = { + 4E0D221D431F6E9E94A08F235F56401F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2245129E598EB9DC78D8E5E981507C52 /* lottie-ios-iOS.xcconfig */; + baseConfigurationReference = 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1382,9 +1723,54 @@ }; name = Debug; }; - ACF7A3A5B19E1C6E9E531D94F66A8199 /* Release */ = { + 50D4E878F814FB89B40BCBE2EB4EC2E6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 283CCF83DE08CC09D1A75FFDC1E80AC2 /* lottie-ios-OSX.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 6D448EE65E477BF3D652503754026E82 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1415,6 +1801,47 @@ }; name = Release; }; + 809E1AF241963DA074CE8CB435C026F2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACOSX_DEPLOYMENT_TARGET = 10.10; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; AF081F3B005FE70462A77ABD87AE2AED /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 2E7978B0FE4ABEF65AB16645DB333515 /* Pods-Lottie-Example-MacOS.debug.xcconfig */; @@ -1452,46 +1879,15 @@ }; name = Debug; }; - D02CC4B0EBC4F051A10CDB1A2D5D4ADF /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2245129E598EB9DC78D8E5E981507C52 /* lottie-ios-iOS.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/lottie-ios-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-iOS/lottie-ios-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Lottie; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - DFF4B3316E8577E9E6CB94DADC29D2E8 /* Release */ = { + B5479E6A53BA97D18D819D3C71894219 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7421CFD687F17710731C740FFE50CF08 /* Pods-Lottie-Example.release.xcconfig */; + baseConfigurationReference = C9A0BB696DAB4D23402E4F92E8A879B0 /* Pods-Lottie-Example.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -1500,11 +1896,11 @@ GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Target Support Files/Pods-Lottie-Example/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-Lottie-Example/Pods-Lottie-Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -1516,11 +1912,11 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - EF05BA5215B16D6B988B93C967355F80 /* Debug */ = { + C149194D93517E09CBA293AA92268F7E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 283CCF83DE08CC09D1A75FFDC1E80AC2 /* lottie-ios-OSX.xcconfig */; + baseConfigurationReference = 6AE2E9ED9175D72655AC45CF4432C1C7 /* lottie-ios-OSX.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1551,50 +1947,81 @@ }; name = Debug; }; + E6DAAEF7B9381C81AE1DBE26BB62C9BB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3FC57817E38FEE88C847125F31F36F1F /* lottie-ios-iOS.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios-iOS/lottie-ios-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/lottie-ios-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-iOS/lottie-ios-iOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Lottie; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0159E28B5FAC65809CFD5D2E92DF1184 /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - EF05BA5215B16D6B988B93C967355F80 /* Debug */, - ACF7A3A5B19E1C6E9E531D94F66A8199 /* Release */, + 50D4E878F814FB89B40BCBE2EB4EC2E6 /* Debug */, + 809E1AF241963DA074CE8CB435C026F2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 70E33968FC6B7C18F92ECB73BB882640 /* Build configuration list for PBXNativeTarget "Pods-lottie-ios_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7343155173797CF1E365D82338A7368C /* Debug */, - 32785CED8F165332830702913AE5F655 /* Release */, + 1846A7490ED6A12DF3C187C8C3EDC2A1 /* Debug */, + 3500D0596C9BE18F53FE5C2A22B7381E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 70E33968FC6B7C18F92ECB73BB882640 /* Build configuration list for PBXNativeTarget "Pods-lottie-ios_Tests" */ = { + 86D670C50239D367E30AD3A8A357DD96 /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 68D57A1C80CE60FD73A64DA126BCBCC3 /* Debug */, - 960615A6B5F8AF503B092AB163F6AC5B /* Release */, + 4E0D221D431F6E9E94A08F235F56401F /* Debug */, + E6DAAEF7B9381C81AE1DBE26BB62C9BB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AF6EB9BB8893935A17B7D6E0B0B4799B /* Build configuration list for PBXNativeTarget "lottie-ios-iOS" */ = { + C987B5E55958C3747F5AE7FFBC8C7287 /* Build configuration list for PBXNativeTarget "Pods-Lottie-Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 982DC93203668F585D8908E81D51F0C6 /* Debug */, - D02CC4B0EBC4F051A10CDB1A2D5D4ADF /* Release */, + B5479E6A53BA97D18D819D3C71894219 /* Debug */, + 32162350FFFB1488E85C9CB42B04D4F0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C987B5E55958C3747F5AE7FFBC8C7287 /* Build configuration list for PBXNativeTarget "Pods-Lottie-Example" */ = { + D264C1C1E79EDA6463270109702E568F /* Build configuration list for PBXNativeTarget "lottie-ios-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3F0D93F269A375B707839F7A63782239 /* Debug */, - DFF4B3316E8577E9E6CB94DADC29D2E8 /* Release */, + C149194D93517E09CBA293AA92268F7E /* Debug */, + 6D448EE65E477BF3D652503754026E82 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/lottie-ios-OSX/Info.plist b/Example/Pods/Target Support Files/lottie-ios-OSX/Info.plist index a7a6daf346..146c33fc40 100644 --- a/Example/Pods/Target Support Files/lottie-ios-OSX/Info.plist +++ b/Example/Pods/Target Support Files/lottie-ios-OSX/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.5.0 + 1.5.2 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/lottie-ios-iOS/Info.plist b/Example/Pods/Target Support Files/lottie-ios-iOS/Info.plist index a7a6daf346..146c33fc40 100644 --- a/Example/Pods/Target Support Files/lottie-ios-iOS/Info.plist +++ b/Example/Pods/Target Support Files/lottie-ios-iOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.5.0 + 1.5.2 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Assets/9squares-AlBoardman.json b/Example/Tests/9squares-AlBoardman.json similarity index 100% rename from Example/Assets/9squares-AlBoardman.json rename to Example/Tests/9squares-AlBoardman.json diff --git a/Example/Assets/HamburgerArrow.json b/Example/Tests/HamburgerArrow.json similarity index 100% rename from Example/Assets/HamburgerArrow.json rename to Example/Tests/HamburgerArrow.json diff --git a/Example/Assets/IconTransitions.json b/Example/Tests/IconTransitions.json similarity index 100% rename from Example/Assets/IconTransitions.json rename to Example/Tests/IconTransitions.json diff --git a/Example/Assets/LottieLogo1.json b/Example/Tests/LottieLogo1.json similarity index 100% rename from Example/Assets/LottieLogo1.json rename to Example/Tests/LottieLogo1.json diff --git a/Example/Assets/LottieLogo1_masked.json b/Example/Tests/LottieLogo1_masked.json similarity index 100% rename from Example/Assets/LottieLogo1_masked.json rename to Example/Tests/LottieLogo1_masked.json diff --git a/Example/Assets/LottieLogo2.json b/Example/Tests/LottieLogo2.json similarity index 100% rename from Example/Assets/LottieLogo2.json rename to Example/Tests/LottieLogo2.json diff --git a/Example/Assets/MotionCorpse-Jrcanest.json b/Example/Tests/MotionCorpse-Jrcanest.json similarity index 100% rename from Example/Assets/MotionCorpse-Jrcanest.json rename to Example/Tests/MotionCorpse-Jrcanest.json diff --git a/Example/Assets/PinJump.json b/Example/Tests/PinJump.json similarity index 100% rename from Example/Assets/PinJump.json rename to Example/Tests/PinJump.json diff --git a/Example/Assets/TwitterHeart.json b/Example/Tests/TwitterHeart.json similarity index 99% rename from Example/Assets/TwitterHeart.json rename to Example/Tests/TwitterHeart.json index 725439c4ef..7e38bec94e 100755 --- a/Example/Assets/TwitterHeart.json +++ b/Example/Tests/TwitterHeart.json @@ -1 +1 @@ -{"assets":[],"layers":[{"ddd":0,"ind":0,"ty":4,"nm":"Dot14","ks":{"o":{"k":100},"r":{"k":-320},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.63,0.81,0.94,1],"e":[0.82,0.65,0.91,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"Dot13","ks":{"o":{"k":100},"r":{"k":-306.6},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.66,0.8,0.97,1],"e":[0.82,0.65,0.91,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"Dot12","ks":{"o":{"k":100},"r":{"k":-271.7},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.78,0.59,0.9,1],"e":[0.89,0.82,0.58,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"Dot11","ks":{"o":{"k":100},"r":{"k":-258.3},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.78,0.62,0.89,1],"e":[0.92,0.75,0.33,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.92,0.75,0.33,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"Dot10","ks":{"o":{"k":100},"r":{"k":-220.3},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.61,0.89,0.79,1],"e":[0.79,0.74,0.6,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"Dot9","ks":{"o":{"k":100},"r":{"k":-206.9},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.62,0.88,0.78,1],"e":[0.79,0.74,0.6,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.79,0.74,0.6,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tm","s":{"k":44,"ix":1},"e":{"k":45,"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 2"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":6,"ty":4,"nm":"Dot8","ks":{"o":{"k":100},"r":{"k":-168.2},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.86,0.62,0.68,1],"e":[0.33,0.6,0.8,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":7,"ty":4,"nm":"Dot7","ks":{"o":{"k":100},"r":{"k":-154.8},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.89,0.6,0.69,1],"e":[0.33,0.6,0.8,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.33,0.6,0.8,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":8,"ty":4,"nm":"Dot6","ks":{"o":{"k":100},"r":{"k":-117.1},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.62,0.82,0.96,1],"e":[0.7,0.84,0.66,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tm","s":{"k":29,"ix":1},"e":{"k":30,"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 2"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":9,"ty":4,"nm":"Dot5","ks":{"o":{"k":100},"r":{"k":-103.7},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.72,0.85,0.95,1],"e":[0.7,0.84,0.67,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.7,0.84,0.67,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":10,"ty":4,"nm":"Dot4","ks":{"o":{"k":100},"r":{"k":-69.3},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.8,0.58,0.93,1],"e":[0.7,0.85,0.66,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":11,"ty":4,"nm":"Dot3","ks":{"o":{"k":100},"r":{"k":-55.9},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.64,0.81,0.97,1],"e":[0.7,0.85,0.66,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.7,0.85,0.66,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":12,"ty":4,"nm":"Dot2","ks":{"o":{"k":100},"r":{"k":-13.4},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.61,0.89,0.79,1],"e":[0.63,0.51,0.62,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":13,"ty":4,"nm":"Dot1","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.62,0.88,0.78,1],"e":[0.8,0.52,0.76,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.8,0.52,0.76,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":14,"ty":4,"nm":"C2","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":38,"s":[25.744,25.744],"e":[60.744,60.744]},{"t":45}]},"p":{"k":[0,0]},"nm":"Ellipse Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0.81,0.58,0.96,1]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38,"s":[23.3],"e":[1]},{"t":45}]},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":38,"op":46,"st":-47,"bm":0,"sr":1},{"ddd":0,"ind":15,"ty":4,"nm":"C1","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":33,"s":[4,4,100],"e":[40,40,100]},{"t":39}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[57.344,57.344]},"p":{"k":[0,0]},"nm":"Ellipse Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33,"s":[1,0,0.26,1],"e":[0.81,0.56,0.97,1]},{"t":39}]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":33,"op":39,"st":-46,"bm":0,"sr":1},{"ddd":0,"ind":16,"ty":4,"nm":"H2","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50.217,50.85,0]},"a":{"k":[2.958,2.958,0]},"s":{"k":[{"i":{"x":[0.32,0.32,0.32],"y":[1,1,0.32]},"o":{"x":[0.68,0.68,0.68],"y":[0,0,0.68]},"n":["0p32_1_0p68_0","0p32_1_0p68_0","0p32_0p32_0p68_0p68"],"t":43,"s":[4,4,100],"e":[48.44,48.44,100]},{"i":{"x":[0.32,0.32,0.32],"y":[1,1,0.32]},"o":{"x":[0.68,0.68,0.68],"y":[0,0,0.68]},"n":["0p32_1_0p68_0","0p32_1_0p68_0","0p32_0p32_0p68_0p68"],"t":54,"s":[48.44,48.44,100],"e":[37.04,37.04,100]},{"i":{"x":[0.32,0.32,0.32],"y":[1,1,0.32]},"o":{"x":[0.68,0.68,0.68],"y":[0,0,0.68]},"n":["0p32_1_0p68_0","0p32_1_0p68_0","0p32_0p32_0p68_0p68"],"t":70,"s":[37.04,37.04,100],"e":[40,40,100]},{"t":91}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[4.833,0],[0,-3.333],[-3.25,0],[0,8.333],[3.917,0],[0,0]],"o":[[-4.833,0],[0,7.667],[3.25,0],[0,-4.5],[-3.917,0],[0,0]],"v":[[-4.583,-10.167],[-11.25,-2.25],[2.833,16.083],[17.167,-2.333],[10.167,-10],[2.917,-5.917]],"c":true}},"nm":"Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[0.84,0.18,0.32,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":43,"op":136,"st":-46,"bm":0,"sr":1},{"ddd":0,"ind":17,"ty":4,"nm":"H1","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50.217,50.85,0]},"a":{"k":[2.958,2.958,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[4.833,0],[0,-3.333],[-3.25,0],[0,8.333],[3.917,0],[0,0]],"o":[[-4.833,0],[0,7.667],[3.25,0],[0,-4.5],[-3.917,0],[0,0]],"v":[[-4.583,-10.167],[-11.25,-2.25],[2.833,16.083],[17.167,-2.333],[10.167,-10],[2.917,-5.917]],"c":true}},"nm":"Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[0.67,0.73,0.76,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":0,"op":33,"st":-46,"bm":0,"sr":1}],"v":"4.4.26","ddd":0,"ip":0,"op":116,"fr":60,"w":100,"h":100} \ No newline at end of file +{"assets":[],"layers":[{"ddd":0,"ind":0,"ty":4,"nm":"Dot14","ks":{"o":{"k":100},"r":{"k":-320},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.63,0.81,0.94,1],"e":[0.82,0.65,0.91,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"Dot13","ks":{"o":{"k":100},"r":{"k":-306.6},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.66,0.8,0.97,1],"e":[0.82,0.65,0.91,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"Dot12","ks":{"o":{"k":100},"r":{"k":-271.7},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.78,0.59,0.9,1],"e":[0.89,0.82,0.58,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"Dot11","ks":{"o":{"k":100},"r":{"k":-258.3},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.78,0.62,0.89,1],"e":[0.92,0.75,0.33,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.92,0.75,0.33,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"Dot10","ks":{"o":{"k":100},"r":{"k":-220.3},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.61,0.89,0.79,1],"e":[0.79,0.74,0.6,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"Dot9","ks":{"o":{"k":100},"r":{"k":-206.9},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.62,0.88,0.78,1],"e":[0.79,0.74,0.6,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.79,0.74,0.6,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tm","s":{"k":44,"ix":1},"e":{"k":45,"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 2"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":6,"ty":4,"nm":"Dot8","ks":{"o":{"k":100},"r":{"k":-168.2},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.86,0.62,0.68,1],"e":[0.33,0.6,0.8,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":7,"ty":4,"nm":"Dot7","ks":{"o":{"k":100},"r":{"k":-154.8},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.89,0.6,0.69,1],"e":[0.33,0.6,0.8,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.33,0.6,0.8,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":8,"ty":4,"nm":"Dot6","ks":{"o":{"k":100},"r":{"k":-117.1},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.62,0.82,0.96,1],"e":[0.7,0.84,0.66,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tm","s":{"k":29,"ix":1},"e":{"k":30,"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 2"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":9,"ty":4,"nm":"Dot5","ks":{"o":{"k":100},"r":{"k":-103.7},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.72,0.85,0.95,1],"e":[0.7,0.84,0.67,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.7,0.84,0.67,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":10,"ty":4,"nm":"Dot4","ks":{"o":{"k":100},"r":{"k":-69.3},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.8,0.58,0.93,1],"e":[0.7,0.85,0.66,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":11,"ty":4,"nm":"Dot3","ks":{"o":{"k":100},"r":{"k":-55.9},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.64,0.81,0.97,1],"e":[0.7,0.85,0.66,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.7,0.85,0.66,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":12,"ty":4,"nm":"Dot2","ks":{"o":{"k":100},"r":{"k":-13.4},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[47],"e":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[29],"e":[9]},{"t":78}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[48],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[30],"e":[10]},{"t":78}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.61,0.89,0.79,1],"e":[0.63,0.51,0.62,1]},{"t":56}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[5],"e":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[2],"e":[0]},{"t":70}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":13,"ty":4,"nm":"Dot1","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-37.5,-40.5],[-1,0.5]],"c":false}},"nm":"Path 1"},{"ty":"tm","s":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[44],"e":[19]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[19],"e":[0]},{"t":89}],"ix":1},"e":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[45],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[20],"e":[1]},{"t":89}],"ix":2},"o":{"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1"},{"ty":"st","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[0.62,0.88,0.78,1],"e":[0.8,0.52,0.76,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.8,0.52,0.76,1],"e":[0.55,0.27,0.71,1]},{"t":66}]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[5],"e":[0]},{"t":89}]},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":44,"op":90,"st":-44,"bm":0,"sr":1},{"ddd":0,"ind":14,"ty":4,"nm":"C2","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":38,"s":[25.744,25.744],"e":[60.744,60.744]},{"t":45}]},"p":{"k":[0,0]},"nm":"Ellipse Path 1"},{"ty":"st","fillEnabled":true,"c":{"k":[0.81,0.58,0.96,1]},"o":{"k":100},"w":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38,"s":[23.3],"e":[1]},{"t":45}]},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":38,"op":46,"st":-47,"bm":0,"sr":1},{"ddd":0,"ind":15,"ty":4,"nm":"C1","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50,50,0]},"a":{"k":[0,0,0]},"s":{"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":33,"s":[4,4,100],"e":[40,40,100]},{"t":39}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"k":[57.344,57.344]},"p":{"k":[0,0]},"nm":"Ellipse Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33,"s":[1,0,0.26,1],"e":[0.81,0.56,0.97,1]},{"t":39}]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1"}],"ip":33,"op":39,"st":-46,"bm":0,"sr":1},{"ddd":0,"ind":16,"ty":4,"nm":"H2","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50.217,50.85,0]},"a":{"k":[2.958,2.958,0]},"s":{"k":[{"i":{"x":[0.32,0.32,0.32],"y":[1,1,0.32]},"o":{"x":[0.68,0.68,0.68],"y":[0,0,0.68]},"n":["0p32_1_0p68_0","0p32_1_0p68_0","0p32_0p32_0p68_0p68"],"t":43,"s":[4,4,100],"e":[48.44,48.44,100]},{"i":{"x":[0.32,0.32,0.32],"y":[1,1,0.32]},"o":{"x":[0.68,0.68,0.68],"y":[0,0,0.68]},"n":["0p32_1_0p68_0","0p32_1_0p68_0","0p32_0p32_0p68_0p68"],"t":54,"s":[48.44,48.44,100],"e":[37.04,37.04,100]},{"i":{"x":[0.32,0.32,0.32],"y":[1,1,0.32]},"o":{"x":[0.68,0.68,0.68],"y":[0,0,0.68]},"n":["0p32_1_0p68_0","0p32_1_0p68_0","0p32_0p32_0p68_0p68"],"t":70,"s":[37.04,37.04,100],"e":[40,40,100]},{"t":91}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[4.833,0],[0,-3.333],[-3.25,0],[0,8.333],[3.917,0],[0,0]],"o":[[-4.833,0],[0,7.667],[3.25,0],[0,-4.5],[-3.917,0],[0,0]],"v":[[-4.583,-10.167],[-11.25,-2.25],[2.833,16.083],[17.167,-2.333],[10.167,-10],[2.917,-5.917]],"c":true}},"nm":"Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[0.84,0.18,0.32,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":43,"op":136,"st":-46,"bm":0,"sr":1},{"ddd":0,"ind":17,"ty":4,"nm":"H1","ks":{"o":{"k":100},"r":{"k":0},"p":{"k":[50.217,50.85,0]},"a":{"k":[2.958,2.958,0]},"s":{"k":[40,40,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"k":{"i":[[4.833,0],[0,-3.333],[-3.25,0],[0,8.333],[3.917,0],[0,0]],"o":[[-4.833,0],[0,7.667],[3.25,0],[0,-4.5],[-3.917,0],[0,0]],"v":[[-4.583,-10.167],[-11.25,-2.25],[2.833,16.083],[17.167,-2.333],[10.167,-10],[2.917,-5.917]],"c":true}},"nm":"Path 1"},{"ty":"fl","fillEnabled":true,"c":{"k":[0.67,0.73,0.76,1]},"o":{"k":100},"nm":"Fill 1"},{"ty":"tr","p":{"k":[0,0],"ix":2},"a":{"k":[0,0],"ix":1},"s":{"k":[100,100],"ix":3},"r":{"k":0,"ix":6},"o":{"k":100,"ix":7},"sk":{"k":0,"ix":4},"sa":{"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1"}],"ip":0,"op":33,"st":-46,"bm":0,"sr":1}],"v":"4.4.26","ddd":0,"ip":0,"op":116,"fr":60,"w":100,"h":100} diff --git a/Example/Assets/TypeFace/A.json b/Example/Tests/TypeFace/A.json similarity index 100% rename from Example/Assets/TypeFace/A.json rename to Example/Tests/TypeFace/A.json diff --git a/Example/Assets/TypeFace/Apostrophe.json b/Example/Tests/TypeFace/Apostrophe.json similarity index 100% rename from Example/Assets/TypeFace/Apostrophe.json rename to Example/Tests/TypeFace/Apostrophe.json diff --git a/Example/Assets/TypeFace/B.json b/Example/Tests/TypeFace/B.json similarity index 100% rename from Example/Assets/TypeFace/B.json rename to Example/Tests/TypeFace/B.json diff --git a/Example/Assets/TypeFace/BlinkingCursor.json b/Example/Tests/TypeFace/BlinkingCursor.json similarity index 100% rename from Example/Assets/TypeFace/BlinkingCursor.json rename to Example/Tests/TypeFace/BlinkingCursor.json diff --git a/Example/Assets/TypeFace/C.json b/Example/Tests/TypeFace/C.json similarity index 100% rename from Example/Assets/TypeFace/C.json rename to Example/Tests/TypeFace/C.json diff --git a/Example/Assets/TypeFace/Colon.json b/Example/Tests/TypeFace/Colon.json similarity index 100% rename from Example/Assets/TypeFace/Colon.json rename to Example/Tests/TypeFace/Colon.json diff --git a/Example/Assets/TypeFace/Comma.json b/Example/Tests/TypeFace/Comma.json similarity index 100% rename from Example/Assets/TypeFace/Comma.json rename to Example/Tests/TypeFace/Comma.json diff --git a/Example/Assets/TypeFace/D.json b/Example/Tests/TypeFace/D.json similarity index 100% rename from Example/Assets/TypeFace/D.json rename to Example/Tests/TypeFace/D.json diff --git a/Example/Assets/TypeFace/E.json b/Example/Tests/TypeFace/E.json similarity index 100% rename from Example/Assets/TypeFace/E.json rename to Example/Tests/TypeFace/E.json diff --git a/Example/Assets/TypeFace/F.json b/Example/Tests/TypeFace/F.json similarity index 100% rename from Example/Assets/TypeFace/F.json rename to Example/Tests/TypeFace/F.json diff --git a/Example/Assets/TypeFace/G.json b/Example/Tests/TypeFace/G.json similarity index 100% rename from Example/Assets/TypeFace/G.json rename to Example/Tests/TypeFace/G.json diff --git a/Example/Assets/TypeFace/H.json b/Example/Tests/TypeFace/H.json similarity index 100% rename from Example/Assets/TypeFace/H.json rename to Example/Tests/TypeFace/H.json diff --git a/Example/Assets/TypeFace/I.json b/Example/Tests/TypeFace/I.json similarity index 100% rename from Example/Assets/TypeFace/I.json rename to Example/Tests/TypeFace/I.json diff --git a/Example/Assets/TypeFace/J.json b/Example/Tests/TypeFace/J.json similarity index 100% rename from Example/Assets/TypeFace/J.json rename to Example/Tests/TypeFace/J.json diff --git a/Example/Assets/TypeFace/K.json b/Example/Tests/TypeFace/K.json similarity index 100% rename from Example/Assets/TypeFace/K.json rename to Example/Tests/TypeFace/K.json diff --git a/Example/Assets/TypeFace/L.json b/Example/Tests/TypeFace/L.json similarity index 100% rename from Example/Assets/TypeFace/L.json rename to Example/Tests/TypeFace/L.json diff --git a/Example/Assets/TypeFace/M.json b/Example/Tests/TypeFace/M.json similarity index 100% rename from Example/Assets/TypeFace/M.json rename to Example/Tests/TypeFace/M.json diff --git a/Example/Assets/TypeFace/N.json b/Example/Tests/TypeFace/N.json similarity index 100% rename from Example/Assets/TypeFace/N.json rename to Example/Tests/TypeFace/N.json diff --git a/Example/Assets/TypeFace/O.json b/Example/Tests/TypeFace/O.json similarity index 100% rename from Example/Assets/TypeFace/O.json rename to Example/Tests/TypeFace/O.json diff --git a/Example/Assets/TypeFace/P.json b/Example/Tests/TypeFace/P.json similarity index 100% rename from Example/Assets/TypeFace/P.json rename to Example/Tests/TypeFace/P.json diff --git a/Example/Assets/TypeFace/Q.json b/Example/Tests/TypeFace/Q.json similarity index 100% rename from Example/Assets/TypeFace/Q.json rename to Example/Tests/TypeFace/Q.json diff --git a/Example/Assets/TypeFace/R.json b/Example/Tests/TypeFace/R.json similarity index 100% rename from Example/Assets/TypeFace/R.json rename to Example/Tests/TypeFace/R.json diff --git a/Example/Assets/TypeFace/S.json b/Example/Tests/TypeFace/S.json similarity index 100% rename from Example/Assets/TypeFace/S.json rename to Example/Tests/TypeFace/S.json diff --git a/Example/Assets/TypeFace/T.json b/Example/Tests/TypeFace/T.json similarity index 100% rename from Example/Assets/TypeFace/T.json rename to Example/Tests/TypeFace/T.json diff --git a/Example/Assets/TypeFace/U.json b/Example/Tests/TypeFace/U.json similarity index 100% rename from Example/Assets/TypeFace/U.json rename to Example/Tests/TypeFace/U.json diff --git a/Example/Assets/TypeFace/V.json b/Example/Tests/TypeFace/V.json similarity index 100% rename from Example/Assets/TypeFace/V.json rename to Example/Tests/TypeFace/V.json diff --git a/Example/Assets/TypeFace/W.json b/Example/Tests/TypeFace/W.json similarity index 100% rename from Example/Assets/TypeFace/W.json rename to Example/Tests/TypeFace/W.json diff --git a/Example/Assets/TypeFace/X.json b/Example/Tests/TypeFace/X.json similarity index 100% rename from Example/Assets/TypeFace/X.json rename to Example/Tests/TypeFace/X.json diff --git a/Example/Assets/TypeFace/Y.json b/Example/Tests/TypeFace/Y.json similarity index 100% rename from Example/Assets/TypeFace/Y.json rename to Example/Tests/TypeFace/Y.json diff --git a/Example/Assets/TypeFace/Z.json b/Example/Tests/TypeFace/Z.json similarity index 100% rename from Example/Assets/TypeFace/Z.json rename to Example/Tests/TypeFace/Z.json diff --git a/Example/Assets/Watermelon.json b/Example/Tests/Watermelon.json similarity index 100% rename from Example/Assets/Watermelon.json rename to Example/Tests/Watermelon.json diff --git a/Example/Assets/vcTransition1.json b/Example/Tests/vcTransition1.json similarity index 100% rename from Example/Assets/vcTransition1.json rename to Example/Tests/vcTransition1.json diff --git a/Example/Assets/vcTransition2.json b/Example/Tests/vcTransition2.json similarity index 100% rename from Example/Assets/vcTransition2.json rename to Example/Tests/vcTransition2.json diff --git a/Example/lottie-ios.xcodeproj/project.pbxproj b/Example/lottie-ios.xcodeproj/project.pbxproj index 6b1f15f60f..71de95d5a2 100644 --- a/Example/lottie-ios.xcodeproj/project.pbxproj +++ b/Example/lottie-ios.xcodeproj/project.pbxproj @@ -20,54 +20,56 @@ 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; + 622F76451F2AAA6500269858 /* LAQRScannerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76441F2AAA6500269858 /* LAQRScannerViewController.m */; }; + 622F76471F2AAC8100269858 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622F76461F2AAC8100269858 /* AVFoundation.framework */; }; + 622F76C21F2BE58100269858 /* 9squares-AlBoardman.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76B51F2BE58100269858 /* 9squares-AlBoardman.json */; }; + 622F76C31F2BE58100269858 /* HamburgerArrow.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76B61F2BE58100269858 /* HamburgerArrow.json */; }; + 622F76C41F2BE58100269858 /* IconTransitions.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76B71F2BE58100269858 /* IconTransitions.json */; }; + 622F76C51F2BE58100269858 /* LottieLogo1_masked.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76B81F2BE58100269858 /* LottieLogo1_masked.json */; }; + 622F76C61F2BE58100269858 /* LottieLogo1.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76B91F2BE58100269858 /* LottieLogo1.json */; }; + 622F76C71F2BE58100269858 /* LottieLogo2.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76BA1F2BE58100269858 /* LottieLogo2.json */; }; + 622F76C81F2BE58100269858 /* MotionCorpse-Jrcanest.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76BB1F2BE58100269858 /* MotionCorpse-Jrcanest.json */; }; + 622F76C91F2BE58100269858 /* PinJump.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76BC1F2BE58100269858 /* PinJump.json */; }; + 622F76CA1F2BE58100269858 /* TwitterHeart.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76BD1F2BE58100269858 /* TwitterHeart.json */; }; + 622F76CC1F2BE58100269858 /* vcTransition1.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76BF1F2BE58100269858 /* vcTransition1.json */; }; + 622F76CD1F2BE58100269858 /* vcTransition2.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76C01F2BE58100269858 /* vcTransition2.json */; }; + 622F76CE1F2BE58100269858 /* Watermelon.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76C11F2BE58100269858 /* Watermelon.json */; }; + 622F76EE1F2BE63100269858 /* A.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D01F2BE63100269858 /* A.json */; }; + 622F76EF1F2BE63100269858 /* Apostrophe.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D11F2BE63100269858 /* Apostrophe.json */; }; + 622F76F01F2BE63100269858 /* B.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D21F2BE63100269858 /* B.json */; }; + 622F76F11F2BE63100269858 /* BlinkingCursor.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D31F2BE63100269858 /* BlinkingCursor.json */; }; + 622F76F21F2BE63100269858 /* C.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D41F2BE63100269858 /* C.json */; }; + 622F76F31F2BE63100269858 /* Colon.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D51F2BE63100269858 /* Colon.json */; }; + 622F76F41F2BE63100269858 /* Comma.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D61F2BE63100269858 /* Comma.json */; }; + 622F76F51F2BE63100269858 /* D.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D71F2BE63100269858 /* D.json */; }; + 622F76F61F2BE63100269858 /* E.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D81F2BE63100269858 /* E.json */; }; + 622F76F71F2BE63100269858 /* F.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76D91F2BE63100269858 /* F.json */; }; + 622F76F81F2BE63100269858 /* G.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76DA1F2BE63100269858 /* G.json */; }; + 622F76F91F2BE63100269858 /* H.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76DB1F2BE63100269858 /* H.json */; }; + 622F76FA1F2BE63100269858 /* I.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76DC1F2BE63100269858 /* I.json */; }; + 622F76FB1F2BE63100269858 /* J.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76DD1F2BE63100269858 /* J.json */; }; + 622F76FC1F2BE63100269858 /* K.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76DE1F2BE63100269858 /* K.json */; }; + 622F76FD1F2BE63100269858 /* L.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76DF1F2BE63100269858 /* L.json */; }; + 622F76FE1F2BE63100269858 /* M.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E01F2BE63100269858 /* M.json */; }; + 622F76FF1F2BE63100269858 /* N.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E11F2BE63100269858 /* N.json */; }; + 622F77001F2BE63100269858 /* O.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E21F2BE63100269858 /* O.json */; }; + 622F77011F2BE63100269858 /* P.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E31F2BE63100269858 /* P.json */; }; + 622F77021F2BE63100269858 /* Q.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E41F2BE63100269858 /* Q.json */; }; + 622F77031F2BE63100269858 /* R.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E51F2BE63100269858 /* R.json */; }; + 622F77041F2BE63100269858 /* S.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E61F2BE63100269858 /* S.json */; }; + 622F77051F2BE63100269858 /* T.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E71F2BE63100269858 /* T.json */; }; + 622F77061F2BE63100269858 /* U.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E81F2BE63100269858 /* U.json */; }; + 622F77071F2BE63100269858 /* V.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76E91F2BE63100269858 /* V.json */; }; + 622F77081F2BE63100269858 /* W.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76EA1F2BE63100269858 /* W.json */; }; + 622F77091F2BE63100269858 /* X.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76EB1F2BE63100269858 /* X.json */; }; + 622F770A1F2BE63100269858 /* Y.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76EC1F2BE63100269858 /* Y.json */; }; + 622F770B1F2BE63100269858 /* Z.json in Resources */ = {isa = PBXBuildFile; fileRef = 622F76ED1F2BE63100269858 /* Z.json */; }; 62B2546A1E3A8D310035A842 /* LottieRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254631E3A8D310035A842 /* LottieRootViewController.m */; }; 62B2546B1E3A8D310035A842 /* AnimationExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254651E3A8D310035A842 /* AnimationExplorerViewController.m */; }; 62B2546C1E3A8D310035A842 /* AnimationTransitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254671E3A8D310035A842 /* AnimationTransitionViewController.m */; }; 62B2546D1E3A8D310035A842 /* JSONExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254691E3A8D310035A842 /* JSONExplorerViewController.m */; }; 62B254721E3A8D3B0035A842 /* TypingDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B2546F1E3A8D3B0035A842 /* TypingDemoViewController.m */; }; 62B254731E3A8D3B0035A842 /* AnimatedTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B254711E3A8D3B0035A842 /* AnimatedTextField.m */; }; - 62B254A21E3A90040035A842 /* 9squares-AlBoardman.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254771E3A90040035A842 /* 9squares-AlBoardman.json */; }; - 62B254A31E3A90040035A842 /* HamburgerArrow.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254781E3A90040035A842 /* HamburgerArrow.json */; }; - 62B254A41E3A90040035A842 /* IconTransitions.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254791E3A90040035A842 /* IconTransitions.json */; }; - 62B254A51E3A90040035A842 /* LottieLogo1_masked.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2547A1E3A90040035A842 /* LottieLogo1_masked.json */; }; - 62B254A61E3A90040035A842 /* LottieLogo1.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2547B1E3A90040035A842 /* LottieLogo1.json */; }; - 62B254A71E3A90040035A842 /* LottieLogo2.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2547C1E3A90040035A842 /* LottieLogo2.json */; }; - 62B254A81E3A90040035A842 /* MotionCorpse-Jrcanest.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2547D1E3A90040035A842 /* MotionCorpse-Jrcanest.json */; }; - 62B254A91E3A90040035A842 /* PinJump.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2547E1E3A90040035A842 /* PinJump.json */; }; - 62B254AA1E3A90040035A842 /* TwitterHeart.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2547F1E3A90040035A842 /* TwitterHeart.json */; }; - 62B254AB1E3A90040035A842 /* A.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254811E3A90040035A842 /* A.json */; }; - 62B254AC1E3A90040035A842 /* Apostrophe.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254821E3A90040035A842 /* Apostrophe.json */; }; - 62B254AD1E3A90040035A842 /* B.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254831E3A90040035A842 /* B.json */; }; - 62B254AE1E3A90040035A842 /* BlinkingCursor.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254841E3A90040035A842 /* BlinkingCursor.json */; }; - 62B254AF1E3A90040035A842 /* C.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254851E3A90040035A842 /* C.json */; }; - 62B254B01E3A90040035A842 /* Colon.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254861E3A90040035A842 /* Colon.json */; }; - 62B254B11E3A90040035A842 /* Comma.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254871E3A90040035A842 /* Comma.json */; }; - 62B254B21E3A90040035A842 /* D.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254881E3A90040035A842 /* D.json */; }; - 62B254B31E3A90040035A842 /* E.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254891E3A90040035A842 /* E.json */; }; - 62B254B41E3A90040035A842 /* F.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2548A1E3A90040035A842 /* F.json */; }; - 62B254B51E3A90040035A842 /* G.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2548B1E3A90040035A842 /* G.json */; }; - 62B254B61E3A90040035A842 /* H.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2548C1E3A90040035A842 /* H.json */; }; - 62B254B71E3A90040035A842 /* I.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2548D1E3A90040035A842 /* I.json */; }; - 62B254B81E3A90040035A842 /* J.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2548E1E3A90040035A842 /* J.json */; }; - 62B254B91E3A90040035A842 /* K.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2548F1E3A90040035A842 /* K.json */; }; - 62B254BA1E3A90040035A842 /* L.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254901E3A90040035A842 /* L.json */; }; - 62B254BB1E3A90040035A842 /* M.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254911E3A90040035A842 /* M.json */; }; - 62B254BC1E3A90040035A842 /* N.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254921E3A90040035A842 /* N.json */; }; - 62B254BD1E3A90040035A842 /* O.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254931E3A90040035A842 /* O.json */; }; - 62B254BE1E3A90040035A842 /* P.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254941E3A90040035A842 /* P.json */; }; - 62B254BF1E3A90040035A842 /* Q.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254951E3A90040035A842 /* Q.json */; }; - 62B254C01E3A90040035A842 /* R.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254961E3A90040035A842 /* R.json */; }; - 62B254C11E3A90040035A842 /* S.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254971E3A90040035A842 /* S.json */; }; - 62B254C21E3A90040035A842 /* T.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254981E3A90040035A842 /* T.json */; }; - 62B254C31E3A90040035A842 /* U.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254991E3A90040035A842 /* U.json */; }; - 62B254C41E3A90040035A842 /* V.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2549A1E3A90040035A842 /* V.json */; }; - 62B254C51E3A90040035A842 /* W.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2549B1E3A90040035A842 /* W.json */; }; - 62B254C61E3A90040035A842 /* X.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2549C1E3A90040035A842 /* X.json */; }; - 62B254C71E3A90040035A842 /* Y.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2549D1E3A90040035A842 /* Y.json */; }; - 62B254C81E3A90040035A842 /* Z.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2549E1E3A90040035A842 /* Z.json */; }; - 62B254C91E3A90040035A842 /* vcTransition1.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2549F1E3A90040035A842 /* vcTransition1.json */; }; - 62B254CA1E3A90040035A842 /* vcTransition2.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254A01E3A90040035A842 /* vcTransition2.json */; }; - 62B254CB1E3A90040035A842 /* Watermelon.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254A11E3A90040035A842 /* Watermelon.json */; }; 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; }; 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; B8E8748514D4FA9C683B1711 /* Pods_lottie_ios_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EBDFEA18138A27DD5A89337 /* Pods_lottie_ios_Tests.framework */; }; @@ -77,8 +79,6 @@ FA1F5A951E42B25500FF36BF /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FA1F5A941E42B25500FF36BF /* ViewController.m */; }; FA1F5A971E42B25500FF36BF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FA1F5A961E42B25500FF36BF /* Assets.xcassets */; }; FA1F5A9A1E42B25500FF36BF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FA1F5A981E42B25500FF36BF /* Main.storyboard */; }; - FA1F5AB11E42C21600FF36BF /* LottieLogo1.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B2547B1E3A90040035A842 /* LottieLogo1.json */; }; - FA1F5AB21E42C21C00FF36BF /* 9squares-AlBoardman.json in Resources */ = {isa = PBXBuildFile; fileRef = 62B254771E3A90040035A842 /* 9squares-AlBoardman.json */; }; FAFA304C27E35A5B877B245D /* Pods_Lottie_Example_MacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC7587B24F90B40ADD0CEA8C /* Pods_Lottie_Example_MacOS.framework */; }; /* End PBXBuildFile section */ @@ -115,6 +115,51 @@ 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = ""; }; 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; + 622F76431F2AAA6500269858 /* LAQRScannerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LAQRScannerViewController.h; sourceTree = ""; }; + 622F76441F2AAA6500269858 /* LAQRScannerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LAQRScannerViewController.m; sourceTree = ""; }; + 622F76461F2AAC8100269858 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 622F76B51F2BE58100269858 /* 9squares-AlBoardman.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "9squares-AlBoardman.json"; sourceTree = ""; }; + 622F76B61F2BE58100269858 /* HamburgerArrow.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = HamburgerArrow.json; sourceTree = ""; }; + 622F76B71F2BE58100269858 /* IconTransitions.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = IconTransitions.json; sourceTree = ""; }; + 622F76B81F2BE58100269858 /* LottieLogo1_masked.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = LottieLogo1_masked.json; sourceTree = ""; }; + 622F76B91F2BE58100269858 /* LottieLogo1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = LottieLogo1.json; sourceTree = ""; }; + 622F76BA1F2BE58100269858 /* LottieLogo2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = LottieLogo2.json; sourceTree = ""; }; + 622F76BB1F2BE58100269858 /* MotionCorpse-Jrcanest.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "MotionCorpse-Jrcanest.json"; sourceTree = ""; }; + 622F76BC1F2BE58100269858 /* PinJump.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = PinJump.json; sourceTree = ""; }; + 622F76BD1F2BE58100269858 /* TwitterHeart.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = TwitterHeart.json; sourceTree = ""; }; + 622F76BF1F2BE58100269858 /* vcTransition1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = vcTransition1.json; sourceTree = ""; }; + 622F76C01F2BE58100269858 /* vcTransition2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = vcTransition2.json; sourceTree = ""; }; + 622F76C11F2BE58100269858 /* Watermelon.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Watermelon.json; sourceTree = ""; }; + 622F76D01F2BE63100269858 /* A.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = A.json; sourceTree = ""; }; + 622F76D11F2BE63100269858 /* Apostrophe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Apostrophe.json; sourceTree = ""; }; + 622F76D21F2BE63100269858 /* B.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = B.json; sourceTree = ""; }; + 622F76D31F2BE63100269858 /* BlinkingCursor.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = BlinkingCursor.json; sourceTree = ""; }; + 622F76D41F2BE63100269858 /* C.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = C.json; sourceTree = ""; }; + 622F76D51F2BE63100269858 /* Colon.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Colon.json; sourceTree = ""; }; + 622F76D61F2BE63100269858 /* Comma.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Comma.json; sourceTree = ""; }; + 622F76D71F2BE63100269858 /* D.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = D.json; sourceTree = ""; }; + 622F76D81F2BE63100269858 /* E.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = E.json; sourceTree = ""; }; + 622F76D91F2BE63100269858 /* F.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = F.json; sourceTree = ""; }; + 622F76DA1F2BE63100269858 /* G.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = G.json; sourceTree = ""; }; + 622F76DB1F2BE63100269858 /* H.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = H.json; sourceTree = ""; }; + 622F76DC1F2BE63100269858 /* I.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = I.json; sourceTree = ""; }; + 622F76DD1F2BE63100269858 /* J.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = J.json; sourceTree = ""; }; + 622F76DE1F2BE63100269858 /* K.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = K.json; sourceTree = ""; }; + 622F76DF1F2BE63100269858 /* L.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = L.json; sourceTree = ""; }; + 622F76E01F2BE63100269858 /* M.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = M.json; sourceTree = ""; }; + 622F76E11F2BE63100269858 /* N.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = N.json; sourceTree = ""; }; + 622F76E21F2BE63100269858 /* O.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = O.json; sourceTree = ""; }; + 622F76E31F2BE63100269858 /* P.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = P.json; sourceTree = ""; }; + 622F76E41F2BE63100269858 /* Q.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Q.json; sourceTree = ""; }; + 622F76E51F2BE63100269858 /* R.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = R.json; sourceTree = ""; }; + 622F76E61F2BE63100269858 /* S.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = S.json; sourceTree = ""; }; + 622F76E71F2BE63100269858 /* T.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = T.json; sourceTree = ""; }; + 622F76E81F2BE63100269858 /* U.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = U.json; sourceTree = ""; }; + 622F76E91F2BE63100269858 /* V.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = V.json; sourceTree = ""; }; + 622F76EA1F2BE63100269858 /* W.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = W.json; sourceTree = ""; }; + 622F76EB1F2BE63100269858 /* X.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = X.json; sourceTree = ""; }; + 622F76EC1F2BE63100269858 /* Y.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Y.json; sourceTree = ""; }; + 622F76ED1F2BE63100269858 /* Z.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Z.json; sourceTree = ""; }; 62569CB2461B12ABC97FCB96 /* lottie-ios.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = "lottie-ios.podspec"; path = "../lottie-ios.podspec"; sourceTree = ""; }; 62B254621E3A8D310035A842 /* LottieRootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LottieRootViewController.h; sourceTree = ""; }; 62B254631E3A8D310035A842 /* LottieRootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LottieRootViewController.m; sourceTree = ""; }; @@ -128,48 +173,6 @@ 62B2546F1E3A8D3B0035A842 /* TypingDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TypingDemoViewController.m; sourceTree = ""; }; 62B254701E3A8D3B0035A842 /* AnimatedTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimatedTextField.h; sourceTree = ""; }; 62B254711E3A8D3B0035A842 /* AnimatedTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnimatedTextField.m; sourceTree = ""; }; - 62B254771E3A90040035A842 /* 9squares-AlBoardman.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "9squares-AlBoardman.json"; path = "Assets/9squares-AlBoardman.json"; sourceTree = SOURCE_ROOT; }; - 62B254781E3A90040035A842 /* HamburgerArrow.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = HamburgerArrow.json; path = Assets/HamburgerArrow.json; sourceTree = SOURCE_ROOT; }; - 62B254791E3A90040035A842 /* IconTransitions.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = IconTransitions.json; path = Assets/IconTransitions.json; sourceTree = SOURCE_ROOT; }; - 62B2547A1E3A90040035A842 /* LottieLogo1_masked.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = LottieLogo1_masked.json; path = Assets/LottieLogo1_masked.json; sourceTree = SOURCE_ROOT; }; - 62B2547B1E3A90040035A842 /* LottieLogo1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = LottieLogo1.json; path = Assets/LottieLogo1.json; sourceTree = SOURCE_ROOT; }; - 62B2547C1E3A90040035A842 /* LottieLogo2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = LottieLogo2.json; path = Assets/LottieLogo2.json; sourceTree = SOURCE_ROOT; }; - 62B2547D1E3A90040035A842 /* MotionCorpse-Jrcanest.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "MotionCorpse-Jrcanest.json"; path = "Assets/MotionCorpse-Jrcanest.json"; sourceTree = SOURCE_ROOT; }; - 62B2547E1E3A90040035A842 /* PinJump.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = PinJump.json; path = Assets/PinJump.json; sourceTree = SOURCE_ROOT; }; - 62B2547F1E3A90040035A842 /* TwitterHeart.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = TwitterHeart.json; path = Assets/TwitterHeart.json; sourceTree = SOURCE_ROOT; }; - 62B254811E3A90040035A842 /* A.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = A.json; sourceTree = ""; }; - 62B254821E3A90040035A842 /* Apostrophe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Apostrophe.json; sourceTree = ""; }; - 62B254831E3A90040035A842 /* B.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = B.json; sourceTree = ""; }; - 62B254841E3A90040035A842 /* BlinkingCursor.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = BlinkingCursor.json; sourceTree = ""; }; - 62B254851E3A90040035A842 /* C.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = C.json; sourceTree = ""; }; - 62B254861E3A90040035A842 /* Colon.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Colon.json; sourceTree = ""; }; - 62B254871E3A90040035A842 /* Comma.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Comma.json; sourceTree = ""; }; - 62B254881E3A90040035A842 /* D.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = D.json; sourceTree = ""; }; - 62B254891E3A90040035A842 /* E.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = E.json; sourceTree = ""; }; - 62B2548A1E3A90040035A842 /* F.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = F.json; sourceTree = ""; }; - 62B2548B1E3A90040035A842 /* G.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = G.json; sourceTree = ""; }; - 62B2548C1E3A90040035A842 /* H.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = H.json; sourceTree = ""; }; - 62B2548D1E3A90040035A842 /* I.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = I.json; sourceTree = ""; }; - 62B2548E1E3A90040035A842 /* J.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = J.json; sourceTree = ""; }; - 62B2548F1E3A90040035A842 /* K.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = K.json; sourceTree = ""; }; - 62B254901E3A90040035A842 /* L.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = L.json; sourceTree = ""; }; - 62B254911E3A90040035A842 /* M.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = M.json; sourceTree = ""; }; - 62B254921E3A90040035A842 /* N.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = N.json; sourceTree = ""; }; - 62B254931E3A90040035A842 /* O.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = O.json; sourceTree = ""; }; - 62B254941E3A90040035A842 /* P.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = P.json; sourceTree = ""; }; - 62B254951E3A90040035A842 /* Q.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Q.json; sourceTree = ""; }; - 62B254961E3A90040035A842 /* R.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = R.json; sourceTree = ""; }; - 62B254971E3A90040035A842 /* S.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = S.json; sourceTree = ""; }; - 62B254981E3A90040035A842 /* T.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = T.json; sourceTree = ""; }; - 62B254991E3A90040035A842 /* U.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = U.json; sourceTree = ""; }; - 62B2549A1E3A90040035A842 /* V.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = V.json; sourceTree = ""; }; - 62B2549B1E3A90040035A842 /* W.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = W.json; sourceTree = ""; }; - 62B2549C1E3A90040035A842 /* X.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = X.json; sourceTree = ""; }; - 62B2549D1E3A90040035A842 /* Y.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Y.json; sourceTree = ""; }; - 62B2549E1E3A90040035A842 /* Z.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Z.json; sourceTree = ""; }; - 62B2549F1E3A90040035A842 /* vcTransition1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = vcTransition1.json; path = Assets/vcTransition1.json; sourceTree = SOURCE_ROOT; }; - 62B254A01E3A90040035A842 /* vcTransition2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = vcTransition2.json; path = Assets/vcTransition2.json; sourceTree = SOURCE_ROOT; }; - 62B254A11E3A90040035A842 /* Watermelon.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = Watermelon.json; path = Assets/Watermelon.json; sourceTree = SOURCE_ROOT; }; 687661C57667AB2C5371F7BB /* Pods-Lottie-Example-MacOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Lottie-Example-MacOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Lottie-Example-MacOS/Pods-Lottie-Example-MacOS.release.xcconfig"; sourceTree = ""; }; 6BC326E3835099034E161393 /* Pods-Lottie-Example-MacOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Lottie-Example-MacOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Lottie-Example-MacOS/Pods-Lottie-Example-MacOS.debug.xcconfig"; sourceTree = ""; }; 6DC4D284D6109D58EE331F86 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; @@ -195,6 +198,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 622F76471F2AAC8100269858 /* AVFoundation.framework in Frameworks */, 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, @@ -263,6 +267,7 @@ 6003F58C195388D20070C39A /* Frameworks */ = { isa = PBXGroup; children = ( + 622F76461F2AAC8100269858 /* AVFoundation.framework */, 6003F58D195388D20070C39A /* Foundation.framework */, 6003F58F195388D20070C39A /* CoreGraphics.framework */, 6003F591195388D20070C39A /* UIKit.framework */, @@ -317,19 +322,19 @@ 6003F5B6195388D20070C39A /* Supporting Files */ = { isa = PBXGroup; children = ( - 62B254801E3A90040035A842 /* TypeFace */, - 62B254771E3A90040035A842 /* 9squares-AlBoardman.json */, - 62B254781E3A90040035A842 /* HamburgerArrow.json */, - 62B254791E3A90040035A842 /* IconTransitions.json */, - 62B2547A1E3A90040035A842 /* LottieLogo1_masked.json */, - 62B2547B1E3A90040035A842 /* LottieLogo1.json */, - 62B2547C1E3A90040035A842 /* LottieLogo2.json */, - 62B2547D1E3A90040035A842 /* MotionCorpse-Jrcanest.json */, - 62B2547E1E3A90040035A842 /* PinJump.json */, - 62B2547F1E3A90040035A842 /* TwitterHeart.json */, - 62B2549F1E3A90040035A842 /* vcTransition1.json */, - 62B254A01E3A90040035A842 /* vcTransition2.json */, - 62B254A11E3A90040035A842 /* Watermelon.json */, + 622F76CF1F2BE63100269858 /* TypeFace */, + 622F76B51F2BE58100269858 /* 9squares-AlBoardman.json */, + 622F76B61F2BE58100269858 /* HamburgerArrow.json */, + 622F76B71F2BE58100269858 /* IconTransitions.json */, + 622F76B81F2BE58100269858 /* LottieLogo1_masked.json */, + 622F76B91F2BE58100269858 /* LottieLogo1.json */, + 622F76BA1F2BE58100269858 /* LottieLogo2.json */, + 622F76BB1F2BE58100269858 /* MotionCorpse-Jrcanest.json */, + 622F76BC1F2BE58100269858 /* PinJump.json */, + 622F76BD1F2BE58100269858 /* TwitterHeart.json */, + 622F76BF1F2BE58100269858 /* vcTransition1.json */, + 622F76C01F2BE58100269858 /* vcTransition2.json */, + 622F76C11F2BE58100269858 /* Watermelon.json */, 6003F5B7195388D20070C39A /* Tests-Info.plist */, 6003F5B8195388D20070C39A /* InfoPlist.strings */, 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */, @@ -348,6 +353,43 @@ name = "Podspec Metadata"; sourceTree = ""; }; + 622F76CF1F2BE63100269858 /* TypeFace */ = { + isa = PBXGroup; + children = ( + 622F76D01F2BE63100269858 /* A.json */, + 622F76D11F2BE63100269858 /* Apostrophe.json */, + 622F76D21F2BE63100269858 /* B.json */, + 622F76D31F2BE63100269858 /* BlinkingCursor.json */, + 622F76D41F2BE63100269858 /* C.json */, + 622F76D51F2BE63100269858 /* Colon.json */, + 622F76D61F2BE63100269858 /* Comma.json */, + 622F76D71F2BE63100269858 /* D.json */, + 622F76D81F2BE63100269858 /* E.json */, + 622F76D91F2BE63100269858 /* F.json */, + 622F76DA1F2BE63100269858 /* G.json */, + 622F76DB1F2BE63100269858 /* H.json */, + 622F76DC1F2BE63100269858 /* I.json */, + 622F76DD1F2BE63100269858 /* J.json */, + 622F76DE1F2BE63100269858 /* K.json */, + 622F76DF1F2BE63100269858 /* L.json */, + 622F76E01F2BE63100269858 /* M.json */, + 622F76E11F2BE63100269858 /* N.json */, + 622F76E21F2BE63100269858 /* O.json */, + 622F76E31F2BE63100269858 /* P.json */, + 622F76E41F2BE63100269858 /* Q.json */, + 622F76E51F2BE63100269858 /* R.json */, + 622F76E61F2BE63100269858 /* S.json */, + 622F76E71F2BE63100269858 /* T.json */, + 622F76E81F2BE63100269858 /* U.json */, + 622F76E91F2BE63100269858 /* V.json */, + 622F76EA1F2BE63100269858 /* W.json */, + 622F76EB1F2BE63100269858 /* X.json */, + 622F76EC1F2BE63100269858 /* Y.json */, + 622F76ED1F2BE63100269858 /* Z.json */, + ); + path = TypeFace; + sourceTree = ""; + }; 62B254741E3A8D400035A842 /* Animation Explorer */ = { isa = PBXGroup; children = ( @@ -355,6 +397,8 @@ 62B254691E3A8D310035A842 /* JSONExplorerViewController.m */, 62B254641E3A8D310035A842 /* AnimationExplorerViewController.h */, 62B254651E3A8D310035A842 /* AnimationExplorerViewController.m */, + 622F76431F2AAA6500269858 /* LAQRScannerViewController.h */, + 622F76441F2AAA6500269858 /* LAQRScannerViewController.m */, ); name = "Animation Explorer"; sourceTree = ""; @@ -379,44 +423,6 @@ name = "Typing Animation Demo"; sourceTree = ""; }; - 62B254801E3A90040035A842 /* TypeFace */ = { - isa = PBXGroup; - children = ( - 62B254811E3A90040035A842 /* A.json */, - 62B254821E3A90040035A842 /* Apostrophe.json */, - 62B254831E3A90040035A842 /* B.json */, - 62B254841E3A90040035A842 /* BlinkingCursor.json */, - 62B254851E3A90040035A842 /* C.json */, - 62B254861E3A90040035A842 /* Colon.json */, - 62B254871E3A90040035A842 /* Comma.json */, - 62B254881E3A90040035A842 /* D.json */, - 62B254891E3A90040035A842 /* E.json */, - 62B2548A1E3A90040035A842 /* F.json */, - 62B2548B1E3A90040035A842 /* G.json */, - 62B2548C1E3A90040035A842 /* H.json */, - 62B2548D1E3A90040035A842 /* I.json */, - 62B2548E1E3A90040035A842 /* J.json */, - 62B2548F1E3A90040035A842 /* K.json */, - 62B254901E3A90040035A842 /* L.json */, - 62B254911E3A90040035A842 /* M.json */, - 62B254921E3A90040035A842 /* N.json */, - 62B254931E3A90040035A842 /* O.json */, - 62B254941E3A90040035A842 /* P.json */, - 62B254951E3A90040035A842 /* Q.json */, - 62B254961E3A90040035A842 /* R.json */, - 62B254971E3A90040035A842 /* S.json */, - 62B254981E3A90040035A842 /* T.json */, - 62B254991E3A90040035A842 /* U.json */, - 62B2549A1E3A90040035A842 /* V.json */, - 62B2549B1E3A90040035A842 /* W.json */, - 62B2549C1E3A90040035A842 /* X.json */, - 62B2549D1E3A90040035A842 /* Y.json */, - 62B2549E1E3A90040035A842 /* Z.json */, - ); - name = TypeFace; - path = Assets/TypeFace; - sourceTree = SOURCE_ROOT; - }; FA1F5A8C1E42B25500FF36BF /* Example for lottie-macos */ = { isa = PBXGroup; children = ( @@ -514,6 +520,9 @@ LastUpgradeCheck = 0720; ORGANIZATIONNAME = "Brandon Withrow"; TargetAttributes = { + 6003F589195388D20070C39A = { + DevelopmentTeam = VM8ZLJG6JZ; + }; 6003F5AD195388D20070C39A = { TestTargetID = 6003F589195388D20070C39A; }; @@ -548,53 +557,53 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 62B254C01E3A90040035A842 /* R.json in Resources */, - 62B254B61E3A90040035A842 /* H.json in Resources */, - 62B254B41E3A90040035A842 /* F.json in Resources */, - 62B254AD1E3A90040035A842 /* B.json in Resources */, + 622F76F01F2BE63100269858 /* B.json in Resources */, + 622F77001F2BE63100269858 /* O.json in Resources */, + 622F76F71F2BE63100269858 /* F.json in Resources */, 48A852311E3A9E71000AD155 /* lottie_logo.png in Resources */, - 62B254B01E3A90040035A842 /* Colon.json in Resources */, - 62B254C51E3A90040035A842 /* W.json in Resources */, + 622F76F11F2BE63100269858 /* BlinkingCursor.json in Resources */, + 622F76C71F2BE58100269858 /* LottieLogo2.json in Resources */, + 622F76C91F2BE58100269858 /* PinJump.json in Resources */, + 622F76F51F2BE63100269858 /* D.json in Resources */, + 622F76CD1F2BE58100269858 /* vcTransition2.json in Resources */, 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */, - 62B254BC1E3A90040035A842 /* N.json in Resources */, - 62B254BB1E3A90040035A842 /* M.json in Resources */, - 62B254B11E3A90040035A842 /* Comma.json in Resources */, - 62B254B51E3A90040035A842 /* G.json in Resources */, - 62B254A21E3A90040035A842 /* 9squares-AlBoardman.json in Resources */, + 622F77091F2BE63100269858 /* X.json in Resources */, + 622F76F41F2BE63100269858 /* Comma.json in Resources */, + 622F76FD1F2BE63100269858 /* L.json in Resources */, + 622F76C81F2BE58100269858 /* MotionCorpse-Jrcanest.json in Resources */, + 622F77031F2BE63100269858 /* R.json in Resources */, 71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */, - 62B254AB1E3A90040035A842 /* A.json in Resources */, - 62B254A31E3A90040035A842 /* HamburgerArrow.json in Resources */, - 62B254C91E3A90040035A842 /* vcTransition1.json in Resources */, - 62B254CA1E3A90040035A842 /* vcTransition2.json in Resources */, - 62B254BF1E3A90040035A842 /* Q.json in Resources */, - 62B254A61E3A90040035A842 /* LottieLogo1.json in Resources */, - 62B254AF1E3A90040035A842 /* C.json in Resources */, - 62B254C11E3A90040035A842 /* S.json in Resources */, - 62B254C61E3A90040035A842 /* X.json in Resources */, - 62B254B71E3A90040035A842 /* I.json in Resources */, - 62B254A81E3A90040035A842 /* MotionCorpse-Jrcanest.json in Resources */, - 62B254BE1E3A90040035A842 /* P.json in Resources */, - 62B254C81E3A90040035A842 /* Z.json in Resources */, - 62B254AC1E3A90040035A842 /* Apostrophe.json in Resources */, - 62B254A41E3A90040035A842 /* IconTransitions.json in Resources */, + 622F76CA1F2BE58100269858 /* TwitterHeart.json in Resources */, + 622F76F91F2BE63100269858 /* H.json in Resources */, + 622F76C61F2BE58100269858 /* LottieLogo1.json in Resources */, + 622F77051F2BE63100269858 /* T.json in Resources */, + 622F77021F2BE63100269858 /* Q.json in Resources */, + 622F76FB1F2BE63100269858 /* J.json in Resources */, + 622F77081F2BE63100269858 /* W.json in Resources */, + 622F76F61F2BE63100269858 /* E.json in Resources */, + 622F76C41F2BE58100269858 /* IconTransitions.json in Resources */, 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, - 62B254B21E3A90040035A842 /* D.json in Resources */, - 62B254A51E3A90040035A842 /* LottieLogo1_masked.json in Resources */, - 62B254C41E3A90040035A842 /* V.json in Resources */, - 62B254AA1E3A90040035A842 /* TwitterHeart.json in Resources */, - 62B254B91E3A90040035A842 /* K.json in Resources */, - 62B254BA1E3A90040035A842 /* L.json in Resources */, - 62B254CB1E3A90040035A842 /* Watermelon.json in Resources */, - 62B254B31E3A90040035A842 /* E.json in Resources */, - 62B254A71E3A90040035A842 /* LottieLogo2.json in Resources */, - 62B254AE1E3A90040035A842 /* BlinkingCursor.json in Resources */, - 62B254C71E3A90040035A842 /* Y.json in Resources */, + 622F76C31F2BE58100269858 /* HamburgerArrow.json in Resources */, + 622F77071F2BE63100269858 /* V.json in Resources */, + 622F77061F2BE63100269858 /* U.json in Resources */, + 622F76CE1F2BE58100269858 /* Watermelon.json in Resources */, + 622F77041F2BE63100269858 /* S.json in Resources */, + 622F770A1F2BE63100269858 /* Y.json in Resources */, 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, - 62B254C21E3A90040035A842 /* T.json in Resources */, - 62B254BD1E3A90040035A842 /* O.json in Resources */, - 62B254A91E3A90040035A842 /* PinJump.json in Resources */, - 62B254B81E3A90040035A842 /* J.json in Resources */, - 62B254C31E3A90040035A842 /* U.json in Resources */, + 622F76FE1F2BE63100269858 /* M.json in Resources */, + 622F76F31F2BE63100269858 /* Colon.json in Resources */, + 622F76FF1F2BE63100269858 /* N.json in Resources */, + 622F76C21F2BE58100269858 /* 9squares-AlBoardman.json in Resources */, + 622F77011F2BE63100269858 /* P.json in Resources */, + 622F76C51F2BE58100269858 /* LottieLogo1_masked.json in Resources */, + 622F76FC1F2BE63100269858 /* K.json in Resources */, + 622F76CC1F2BE58100269858 /* vcTransition1.json in Resources */, + 622F76FA1F2BE63100269858 /* I.json in Resources */, + 622F76F21F2BE63100269858 /* C.json in Resources */, + 622F76F81F2BE63100269858 /* G.json in Resources */, + 622F76EF1F2BE63100269858 /* Apostrophe.json in Resources */, + 622F76EE1F2BE63100269858 /* A.json in Resources */, + 622F770B1F2BE63100269858 /* Z.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -611,9 +620,7 @@ buildActionMask = 2147483647; files = ( FA1F5A971E42B25500FF36BF /* Assets.xcassets in Resources */, - FA1F5AB11E42C21600FF36BF /* LottieLogo1.json in Resources */, FA1F5A9A1E42B25500FF36BF /* Main.storyboard in Resources */, - FA1F5AB21E42C21C00FF36BF /* 9squares-AlBoardman.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -770,6 +777,7 @@ 62B254731E3A8D3B0035A842 /* AnimatedTextField.m in Sources */, 62B2546C1E3A8D310035A842 /* AnimationTransitionViewController.m in Sources */, 6003F59A195388D20070C39A /* main.m in Sources */, + 622F76451F2AAA6500269858 /* LAQRScannerViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -915,6 +923,7 @@ baseConfigurationReference = 99F3982078CC5B93DA1AFF47 /* Pods-Lottie-Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = VM8ZLJG6JZ; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "lottie-ios/lottie-ios-Prefix.pch"; INFOPLIST_FILE = "lottie-ios/lottie-ios-Info.plist"; @@ -931,6 +940,7 @@ baseConfigurationReference = D8C83F4B06A893EA3322E53A /* Pods-Lottie-Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = VM8ZLJG6JZ; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "lottie-ios/lottie-ios-Prefix.pch"; INFOPLIST_FILE = "lottie-ios/lottie-ios-Info.plist"; diff --git a/Example/lottie-ios/AnimationExplorerViewController.m b/Example/lottie-ios/AnimationExplorerViewController.m index bc923b8686..a3d0b18c44 100644 --- a/Example/lottie-ios/AnimationExplorerViewController.m +++ b/Example/lottie-ios/AnimationExplorerViewController.m @@ -8,6 +8,7 @@ #import "AnimationExplorerViewController.h" #import "JSONExplorerViewController.h" +#import "LAQRScannerViewController.h" #import typedef enum : NSUInteger { @@ -144,6 +145,17 @@ - (void)_setBGColor:(UIBarButtonItem *)button { } - (void)_showURLInput { + LAQRScannerViewController *qrVC = [[LAQRScannerViewController alloc] init]; + [qrVC setCompletionBlock:^(NSString *selectedAnimation) { + if (selectedAnimation) { + [self _loadAnimationFromURLString:selectedAnimation]; + } + [self dismissViewControllerAnimated:YES completion:NULL]; + }]; + UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:qrVC]; + [self presentViewController:nav animated:YES completion:NULL]; + return; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Load From URL" message:NULL preferredStyle:UIAlertControllerStyleAlert]; diff --git a/Example/lottie-ios/LAQRScannerViewController.h b/Example/lottie-ios/LAQRScannerViewController.h new file mode 100644 index 0000000000..24edb3d3b6 --- /dev/null +++ b/Example/lottie-ios/LAQRScannerViewController.h @@ -0,0 +1,15 @@ +// +// LAQRScannerViewController.h +// lottie-ios +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import + +@interface LAQRScannerViewController : UIViewController + +@property (nonatomic, copy) void (^completionBlock)(NSString *jsonURL); + +@end diff --git a/Example/lottie-ios/LAQRScannerViewController.m b/Example/lottie-ios/LAQRScannerViewController.m new file mode 100644 index 0000000000..ad8bafe4c3 --- /dev/null +++ b/Example/lottie-ios/LAQRScannerViewController.m @@ -0,0 +1,106 @@ +// +// LAQRScannerViewController.m +// lottie-ios +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Brandon Withrow. All rights reserved. +// + +#import "LAQRScannerViewController.h" +#import + +@interface LAQRScannerViewController () +@property (nonatomic) BOOL isReading; +@property (strong, nonatomic) UIView *viewPreview; +@property (nonatomic, strong) AVCaptureSession *captureSession; +@property (nonatomic, strong) AVCaptureVideoPreviewLayer *videoPreviewLayer; +@end + +@implementation LAQRScannerViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" + style:UIBarButtonItemStyleDone + target:self + action:@selector(_closePressed)]; + self.viewPreview = [[UIView alloc] initWithFrame:self.view.bounds]; + self.viewPreview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:self.viewPreview]; + _isReading = NO; + + _captureSession = nil; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + if (!_isReading) { + _isReading = [self startReading]; + } +} + +- (BOOL)startReading { + NSError *error; + + AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; + + AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error]; + if (!input) { + NSLog(@"%@", [error localizedDescription]); + return NO; + } + + _captureSession = [[AVCaptureSession alloc] init]; + [_captureSession addInput:input]; + + AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init]; + [_captureSession addOutput:captureMetadataOutput]; + + dispatch_queue_t dispatchQueue; + dispatchQueue = dispatch_queue_create("myQueue", NULL); + [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue]; + [captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]]; + + if (_videoPreviewLayer) { + [_videoPreviewLayer removeFromSuperlayer]; + _videoPreviewLayer = nil; + } + _videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession]; + [_videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; + [_videoPreviewLayer setFrame:_viewPreview.layer.bounds]; + [_viewPreview.layer addSublayer:_videoPreviewLayer]; + + [_captureSession startRunning]; + + return YES; +} + +-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ + if (metadataObjects != nil && [metadataObjects count] > 0) { + AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0]; + if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) { + [self performSelectorOnMainThread:@selector(stopReadingWithString:) withObject:[metadataObj stringValue] waitUntilDone:NO]; + } + } +} + +- (void)stopReadingWithString:(NSString *)urlString { + if (_isReading) { + _isReading = NO; + [_captureSession stopRunning]; + _captureSession = nil; + [_videoPreviewLayer removeFromSuperlayer]; + _videoPreviewLayer = nil; + if (self.completionBlock) { + self.completionBlock(urlString); + } + } + +} + +- (void)_closePressed { + [self stopReadingWithString:nil]; +} + +@end diff --git a/Example/lottie-ios/lottie-ios-Info.plist b/Example/lottie-ios/lottie-ios-Info.plist index f926c0faed..ba29ce8bb5 100644 --- a/Example/lottie-ios/lottie-ios-Info.plist +++ b/Example/lottie-ios/lottie-ios-Info.plist @@ -2,6 +2,8 @@ + NSCameraUsageDescription + Used to scan Barcodes CFBundleDevelopmentRegion en CFBundleDisplayName diff --git a/Lottie-Screenshot/Lottie-ScreenshotTests/LottieAnimationTestCase.m b/Lottie-Screenshot/Lottie-ScreenshotTests/LottieAnimationTestCase.m index 578b4513ad..750435f090 100644 --- a/Lottie-Screenshot/Lottie-ScreenshotTests/LottieAnimationTestCase.m +++ b/Lottie-Screenshot/Lottie-ScreenshotTests/LottieAnimationTestCase.m @@ -37,7 +37,7 @@ - (void)testAnimationProgress:(float)progress { self.animationView.animationProgress = progress; [self waitForExpectationsWithTimeout:1 handler:^(NSError * _Nullable error) { - FBSnapshotVerifyView(self.animationView.layer, nil); + FBSnapshotVerifyViewWithOptions(self.animationView.layer, nil, FBSnapshotTestCaseDefaultSuffixes(), 0.005); }]; } diff --git a/Lottie-Screenshot/Podfile.lock b/Lottie-Screenshot/Podfile.lock index 8599a1467f..8566503f4b 100644 --- a/Lottie-Screenshot/Podfile.lock +++ b/Lottie-Screenshot/Podfile.lock @@ -1,6 +1,6 @@ PODS: - FBSnapshotTestCase/Core (2.1.4) - - lottie-ios (1.5.1) + - lottie-ios (1.5.2) DEPENDENCIES: - FBSnapshotTestCase/Core @@ -8,11 +8,11 @@ DEPENDENCIES: EXTERNAL SOURCES: lottie-ios: - :path: ../ + :path: "../" SPEC CHECKSUMS: FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a - lottie-ios: f680a7c4cb7a567ecf258fde0f967913aff111b8 + lottie-ios: 255a0e95973a5c4424e809d7a5c19f7384c73e84 PODFILE CHECKSUM: 3901ca88392ceeedc459164e7080c5f357e54e04 diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTAnimatorNode.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTAnimatorNode.h new file mode 120000 index 0000000000..ebc92af996 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTAnimatorNode.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTArrayInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTArrayInterpolator.h new file mode 120000 index 0000000000..bbbce34f61 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTArrayInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTBezierData.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTBezierData.h new file mode 120000 index 0000000000..68a63f4561 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTBezierData.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/AnimatableProperties/LOTBezierData.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTBezierPath.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTBezierPath.h new file mode 120000 index 0000000000..40fbaf895b --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTBezierPath.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/Extensions/LOTBezierPath.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTCircleAnimator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTCircleAnimator.h new file mode 120000 index 0000000000..6f87193889 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTCircleAnimator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTColorInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTColorInterpolator.h new file mode 120000 index 0000000000..f0fa3711ad --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTColorInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTCompositionContainer.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTCompositionContainer.h new file mode 120000 index 0000000000..c05dcdb5dd --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTCompositionContainer.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTFillRenderer.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTFillRenderer.h new file mode 120000 index 0000000000..da1f9f8b45 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTFillRenderer.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTGradientFillRender.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTGradientFillRender.h new file mode 120000 index 0000000000..5628dc1397 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTGradientFillRender.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTKeyframe.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTKeyframe.h new file mode 120000 index 0000000000..846ab24214 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTKeyframe.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTLayerContainer.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTLayerContainer.h new file mode 120000 index 0000000000..9646e6d026 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTLayerContainer.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTMaskContainer.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTMaskContainer.h new file mode 120000 index 0000000000..eb901fd394 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTMaskContainer.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTNumberInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTNumberInterpolator.h new file mode 120000 index 0000000000..f7442cbcf0 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTNumberInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPathAnimator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPathAnimator.h new file mode 120000 index 0000000000..176a6f1378 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPathAnimator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPathInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPathInterpolator.h new file mode 120000 index 0000000000..ba905342d6 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPathInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPointInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPointInterpolator.h new file mode 120000 index 0000000000..bfcef62705 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPointInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPolygonAnimator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPolygonAnimator.h new file mode 120000 index 0000000000..37540eaad6 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPolygonAnimator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPolystarAnimator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPolystarAnimator.h new file mode 120000 index 0000000000..451b0873f5 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTPolystarAnimator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRectInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRectInterpolator.h new file mode 120000 index 0000000000..23ce6cf127 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRectInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRenderGroup.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRenderGroup.h new file mode 120000 index 0000000000..c12d6de8ab --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRenderGroup.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRenderNode.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRenderNode.h new file mode 120000 index 0000000000..ae6420db3c --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRenderNode.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/LOTRenderNode.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRepeaterRenderer.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRepeaterRenderer.h new file mode 120000 index 0000000000..40bf455072 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRepeaterRenderer.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRoundedRectAnimator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRoundedRectAnimator.h new file mode 120000 index 0000000000..ce5ea2a115 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTRoundedRectAnimator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeGradientFill.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeGradientFill.h new file mode 120000 index 0000000000..72e1cab5d7 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeGradientFill.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/Models/LOTShapeGradientFill.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeRepeater.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeRepeater.h new file mode 120000 index 0000000000..139f561f86 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeRepeater.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/Models/LOTShapeRepeater.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeStar.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeStar.h new file mode 120000 index 0000000000..387921e31b --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTShapeStar.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/Models/LOTShapeStar.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTSizeInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTSizeInterpolator.h new file mode 120000 index 0000000000..0efc1f8be3 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTSizeInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTStrokeRenderer.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTStrokeRenderer.h new file mode 120000 index 0000000000..8c1ab0e868 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTStrokeRenderer.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTTransformInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTTransformInterpolator.h new file mode 120000 index 0000000000..a3a7793d30 --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTTransformInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTTrimPathNode.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTTrimPathNode.h new file mode 120000 index 0000000000..7ac7f9e21f --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTTrimPathNode.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTValueInterpolator.h b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTValueInterpolator.h new file mode 120000 index 0000000000..9e7384313f --- /dev/null +++ b/Lottie-Screenshot/Pods/Headers/Private/lottie-ios/Lottie/LOTValueInterpolator.h @@ -0,0 +1 @@ +../../../../../../lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h \ No newline at end of file diff --git a/Lottie-Screenshot/Pods/Local Podspecs/lottie-ios.podspec.json b/Lottie-Screenshot/Pods/Local Podspecs/lottie-ios.podspec.json index 11108e7fe8..b563129dc8 100644 --- a/Lottie-Screenshot/Pods/Local Podspecs/lottie-ios.podspec.json +++ b/Lottie-Screenshot/Pods/Local Podspecs/lottie-ios.podspec.json @@ -1,6 +1,6 @@ { "name": "lottie-ios", - "version": "1.5.1", + "version": "1.5.2", "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 enginineer 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", @@ -13,7 +13,7 @@ }, "source": { "git": "https://github.com/airbnb/lottie-ios.git", - "tag": "1.5.1" + "tag": "1.5.2" }, "platforms": { "ios": "8.0", diff --git a/Lottie-Screenshot/Pods/Manifest.lock b/Lottie-Screenshot/Pods/Manifest.lock index 8599a1467f..8566503f4b 100644 --- a/Lottie-Screenshot/Pods/Manifest.lock +++ b/Lottie-Screenshot/Pods/Manifest.lock @@ -1,6 +1,6 @@ PODS: - FBSnapshotTestCase/Core (2.1.4) - - lottie-ios (1.5.1) + - lottie-ios (1.5.2) DEPENDENCIES: - FBSnapshotTestCase/Core @@ -8,11 +8,11 @@ DEPENDENCIES: EXTERNAL SOURCES: lottie-ios: - :path: ../ + :path: "../" SPEC CHECKSUMS: FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a - lottie-ios: f680a7c4cb7a567ecf258fde0f967913aff111b8 + lottie-ios: 255a0e95973a5c4424e809d7a5c19f7384c73e84 PODFILE CHECKSUM: 3901ca88392ceeedc459164e7080c5f357e54e04 diff --git a/Lottie-Screenshot/Pods/Pods.xcodeproj/project.pbxproj b/Lottie-Screenshot/Pods/Pods.xcodeproj/project.pbxproj index 047254a95c..51f554d508 100644 --- a/Lottie-Screenshot/Pods/Pods.xcodeproj/project.pbxproj +++ b/Lottie-Screenshot/Pods/Pods.xcodeproj/project.pbxproj @@ -7,119 +7,181 @@ objects = { /* Begin PBXBuildFile section */ - 004E610849A35AE7DE7A9A086E8782E6 /* LOTStrokeShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BE2BCC7714B0D364A21645462B39FF66 /* LOTStrokeShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05232FF14413AEC4305804FBCF2476CD /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DD3F8CA54098F443CC46D9A41F78270 /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 085FE0FAD4FEAD7ABB5BA5F1008639C2 /* LOTAnimatableScaleValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3560077B1BC8B9E28CDE25159CA9D646 /* LOTAnimatableScaleValue.m */; }; - 0864E26084214BD1B49E1CE263B78747 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F7387090D868251A127AAB6C4280807 /* LOTLayerGroup.m */; }; + 00E9F66FE10E21FCC1B97A2EDA583FB2 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6C67B6533F446F604A43CD9ABD3E9C /* CAAnimationGroup+LOTAnimatableGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 049FBC85DF5B545A6874315BE0363540 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AD7FC0C844D9C07EC44F09838BD33A9 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0526AEF46164BCF9D26C6CBF9DBFBDA6 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = C5BA4D7F1DE62F8B8D34F2F1ADE84A2B /* LOTPolygonAnimator.m */; }; + 09F074DBF07AD43DD7EBCC013530282B /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1627A3686A013A4978B277820D892B /* LOTLayerContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A35A773E258F2B6163A3FC6953435C0 /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFA2138BAD3E671C01441176B9B9C3A /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AEE2F84A476FC2F77D5B4907E63E16C /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BD75A868065274C17335AA17E5FEF0C /* LOTMask.m */; }; 0B56FACEE662ECE31A3B495D3CF366E9 /* UIImage+Diff.h in Headers */ = {isa = PBXBuildFile; fileRef = F8F7C7C75CB8DB00E995AF6F8293409A /* UIImage+Diff.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0D27778CADFD5426FF627572D09CEE6E /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F5BFE76B2221E79668085B2455D08F6 /* UIColor.m */; }; - 0E27C6362C76387D2579BA2123E24C35 /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 61866EE2B860BE232DBF27E31260CD9B /* LOTShapeRectangle.m */; }; - 0ED2ADBCE28E6B97D549934625B1B040 /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = A16AFBD73CF204B5EDFFFFA8C591F3B1 /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 113BB3A838E558D498E636EA469EA811 /* LOTCompositionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 64C02EFE2DB9F6A1E2AA3F4E2EB4CFC4 /* LOTCompositionLayer.m */; }; + 0E62A6C089292F99E0BCCAF782EB1603 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9596EA5FD08A810B013CEFFD20C3B969 /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; 133817BF8D9890AF184FFE4B7C91E67C /* UIImage+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B68973EFABFE5144C68CDEB1BCBCB1 /* UIImage+Compare.m */; }; - 144842511ABA8C2BAAA9B126CB1F1AE6 /* LOTGroupLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B78C012C08124056B21345F1023272B /* LOTGroupLayerView.m */; }; + 138DED758881D39839E7F2E278E59181 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 50EB4083DFE620DDF4906E091C6D1751 /* LOTStrokeRenderer.m */; }; 160AA8672CFFE0695070CE13081F9C0E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA75099E263FEEEAC4EABC8DDDC7FEE0 /* Foundation.framework */; }; - 182135EFDA6B5561FC21D1B3D1883430 /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = 05176770DB87B145505D05D41E3452DF /* LOTShapeStroke.m */; }; - 18787D6A762B68F3BF9FB56D211F4E53 /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = CCCF8665CEAF126BB717C90B0C56BD9E /* LOTStrokeShapeLayer.m */; }; - 1A288818B22434F67FCF6CAF87B69DB8 /* LOTAnimatableColorValue.h in Headers */ = {isa = PBXBuildFile; fileRef = A00524CC857D7CAB4512B07E911C576B /* LOTAnimatableColorValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 164751C09F5DACD699894C0E8FE33A53 /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C432AF3791036D8B9B89BD9F463DBB3 /* LOTPathInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1ABE62F739C589A875896E23294C73EB /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = AB61BC9522B70516DE0276A51656BAC7 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B185D4A697174B6CB74F1610A20CAA3 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 66660FA7DF36C33C2FEB06B167145D24 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1B5EF4D1016C74BFD05E6F5E9FC9E3FC /* UIImage+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = 97CBB2AA6774AC8A48C1906307FBEAD8 /* UIImage+Compare.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1C8FCC1D19D95BC30FE3F6C8A3F29CB9 /* LOTAnimatableLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ECEA9F0B536624CB4C107A7C4A6A537 /* LOTAnimatableLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D299A13E6DAE2FBC9DF132E49F5FEE1 /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B596C7B22D9AF68985A746C4924BB6 /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E1D1EF438D496FC3563AB7B2237682B /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = EA73364B20DF118492F5374D5C5F015A /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1EAB281991C7149434641C09B116A88A /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 05364621E18EB334A0BA99ABBA3D859D /* LOTAnimationView.m */; }; - 21BE1C548791A438C8D6C90F0AF80326 /* LOTPlatformCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 93BA027A45339A7CBAD75999788DFDB1 /* LOTPlatformCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C06AD276BE5D8F028C02E71A6FF61EE /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = AD750771DCEF51993F26E0D049B7F757 /* LOTShapeTransform.m */; }; + 1EABFC691B8EC4D9334C6D071EED0467 /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6549BFD5265F947675B72B5A85B01EDC /* LOTColorInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EB040A0D2EDE50A0C4F6B59BEA41E74 /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = E63DC8FB2D30F5FB6CC3946BE1B5C0B0 /* LOTBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F227C7F52A495ED8A47497CF90BF6DE /* LOTAnimatableNumberValue.h in Headers */ = {isa = PBXBuildFile; fileRef = D52F7E5EF7C31319E0D0E2CB1978F495 /* LOTAnimatableNumberValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 20C182035FA199E451D1D806C9117D2B /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A64611498CB9ED461990C8822268B79 /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21BFF1A87F7C5B01F080682646F9BB3E /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C6789C16F7DC792D600E1018BCDBE0 /* LOTNumberInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; 21FC0E89EBC90C649D1228868E5F09E9 /* FBSnapshotTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = CCDF5A3F7DAEA1255A1B399D8AAE1B8D /* FBSnapshotTestController.m */; }; - 26D2E6ABB11485F0C41DB6BDA7BDAE36 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D02D0DA5D34B73A3E203C4F57A3F646 /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 273380C3C5FF5A3A2745F9CEADF5E3A8 /* LOTRectShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 80C463F28C5C272770C4B5D1801F4BF6 /* LOTRectShapeLayer.m */; }; - 279328FE6763888ED2750A4903CF0134 /* LOTShapeLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E423746CD8AC8E3A0848266FE6443731 /* LOTShapeLayerView.m */; }; - 2A16C057A820E388D1747481B2431FDB /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C9DB2BA605971226D43AEEC7C1B50CB /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2ED3318CE04B591883206DDBC0CB773E /* LOTLayerGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1DD07E19C76E929D5FFBE8B540B6C9 /* LOTLayerGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3022BC32A48B9131D7500DD2C813659E /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = 07318C2E4A31ADF8D8C9429B28E7284A /* LOTShapeCircle.m */; }; - 305A4FC079A09ECC076C8FC0ED888736 /* CADisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = A8EB28EDBE333C083789AEB11FC56720 /* CADisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 307FF2F6A1653C54A8EEE0331459DE70 /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 8306854ED41D9256D98722F30C695233 /* LOTShapePath.m */; }; - 3650FB70615288AC8E1AF7935218EB91 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = E4CDC2607337D2B22E81EA58572A8ADA /* LOTShapeGroup.m */; }; - 40BCE0A7D1847AF1D6E307033A930BEA /* LOTEllipseShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = EADB4AC5A4CCC033F65AA351B6F35992 /* LOTEllipseShapeLayer.m */; }; - 40C441ECE0AF19B750FD1D732F3E92BB /* LOTRectShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D1604BD778526A0036FC6B8B35E44307 /* LOTRectShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22A9E8873A8F0AB982117511A8FEB9E8 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DD4370F42E5CF9B011EA229D9846A /* LOTKeyframe.m */; }; + 22E48EAFE0192978D54DE3F25FB890AB /* LOTLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = E93B1D40A93436398AF303D940D384CB /* LOTLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25292BC36C7A8EE2308D0BAE6D138D3D /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A78C529B916D0520F561DFDD9241C2 /* LOTPolystarAnimator.m */; }; + 299F8B4C2FE51DD869EC860A81C5C55C /* LOTAnimatableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FAA2A30B7324CAB689BF4F0ED28D956 /* LOTAnimatableValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29D0227571CF334AD281CAB54BAF61D2 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 3066BDA57C77299EFE06CE33C104575D /* LOTRenderGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AA3DD6FF0355149FAA3AC43C781D2F6 /* LOTAnimatableShapeValue.m in Sources */ = {isa = PBXBuildFile; fileRef = C24A18AB03738A6E4063A1867A01CFBE /* LOTAnimatableShapeValue.m */; }; + 2BC90543A67615568B8B8878DCE58381 /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 722C5C44D4AE0E582F72CB1638885E17 /* LOTPathAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2CCFEF3FA00FE7425B862A0CD59D906F /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A46641CC627983D2FE35AB06922B67 /* LOTNumberInterpolator.m */; }; + 31AA00FD1D8A0ED3E1C162C0950B1C2A /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = B058FEF8C4B8A14CF2BE9CF726BA996A /* LOTMaskContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31E99DE7F688C8FDC547A7A109BE757D /* LOTShapeStroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F369532B91988E02E39A60BFCD1FBFF /* LOTShapeStroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32D6883E1F24EC5976E96532EAA6E9B6 /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B42C26D498EB84442579B747AD8DA9A8 /* LOTStrokeShapeLayer.m */; }; + 350E7A199003C7B613AA91FDBF23824C /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F7C346109B17740A2923EFDD3F99719 /* LOTTransformInterpolator.m */; }; + 384E2AF9349D6DA4CF0886406C5F0C87 /* LOTLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BB623264EACAA94F9AC3EDC3F3A53ED9 /* LOTLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39382D9850E94B41031571BC9301566A /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = AC87C273F9943D70F84793A27BA712B5 /* LOTAnimationTransitionController.m */; }; + 3B423A044949204436D1DBDC159444F7 /* UIColor+Expanded.h in Headers */ = {isa = PBXBuildFile; fileRef = ABC5322242F1BA347692C7C72699B119 /* UIColor+Expanded.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3BF3B3556B31AAC221B22EE4BC2CAEBE /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 16C492622F543931E0B0C47EA51666F4 /* CAAnimationGroup+LOTAnimatableGroup.m */; }; + 3CD0B0C22FD4844218A2B7B3A80CBFB7 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E496C2E8F5310CCD9757EFC3961482B /* UIKit.framework */; }; + 3F2D0A1C9E917D10EE5D5D78E43E3DC1 /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A306D3E602FBA9C425FC3D59A2CDC65 /* LOTAnimationCache.m */; }; 41AD7987A6FBC617A26EA8E0DB63E7B9 /* Pods-Lottie-ScreenshotTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 999C515F2D3951E507FD245E96E0F3D1 /* Pods-Lottie-ScreenshotTests-dummy.m */; }; 435ADA859052D444EC9C43D83A74D8F4 /* FBSnapshotTestCase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E09DE45901F0746BBFF1DCE9EE718B4F /* FBSnapshotTestCase-dummy.m */; }; - 4466C1B3F3FC86FAF4C7C02EACF67804 /* LOTAnimatableNumberValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7569901E51D990CC036B38B15EBD39F9 /* LOTAnimatableNumberValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4388FE672CE8F93A24271A880423C1E0 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C8A9F45336DB43A582BA0C6643FCF2A /* LOTArrayInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 448493A40300631B792363FDD32C5914 /* LOTLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 191BB6CED6399F9D21431195328D54E5 /* LOTLayerView.m */; }; + 4555EDFF3F60AC394D0AD8378E8142F1 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 76A7C125C66093A9493256A06EDF3579 /* LOTGradientFillRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45C06ED5A531AB7D2E645789AAB3A679 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 01DCDEBBA33B8BCA26A88DF2D44FC34E /* LOTRepeaterRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47B1AE2DD1B916BA39367611C4C1248C /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF405402E29A37ABD3295AA01C36673 /* LOTGradientFillRender.m */; }; 4870F9E71CC1264977D7B4C9DBC31563 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C32099E0A716483F90035D502A494AC /* XCTest.framework */; }; - 4B3290A15515F7D8ED634ACE200A126E /* LOTLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 038940E0144433F656A85787AEFC4789 /* LOTLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4910254530274E0C5840150DDD27D693 /* CGGeometry+LOTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EA996A8184E315E8098EAADC79406D26 /* CGGeometry+LOTAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A0392247A949063027AB67915476CBA /* LOTCompositionLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D1DCAF1845418A4B1EBF2B7DE82FA4 /* LOTCompositionLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4AB625D15670D83859905930ABDC32FA /* LOTAnimatablePointValue.m in Sources */ = {isa = PBXBuildFile; fileRef = F83A6EA50DAA891141D4479AC44D9F07 /* LOTAnimatablePointValue.m */; }; + 4B2BF9711D5E4216B060F2E5BF358C84 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5447235465EC01227DAAAF0A6F415278 /* LOTAnimatorNode.m */; }; + 4C0716DDBEAE2CAF5B525FB6A3239AE9 /* LOTRectInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = BD7C385486A19B65B6DE24BF76B9E61D /* LOTRectInterpolator.m */; }; + 4EA163180400126D8FD241ED05C7227A /* LOTAnimatableColorValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D266ED5D6437E39A03CEB41537E86BA /* LOTAnimatableColorValue.m */; }; + 4FE4B3E12D9F76E98BB654DCADF577A4 /* LOTMaskLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 26083751B6DBC952D1529284554A760E /* LOTMaskLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 503CFC8335EC236054600AF803E1417B /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 66A9C5B3DC7EFCCE0F58AF0D8045E00C /* LOTPointInterpolator.m */; }; + 50EA3B9F2E9128194B1E92291E2CDC59 /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = A8027C5611F7F60898E2FB34ABCB0E37 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 51603663E033F753C1E9C1BC2D0B22ED /* FBSnapshotTestCasePlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = F9FD642016AA39DDF7D9B92D3C8E1F1C /* FBSnapshotTestCasePlatform.m */; }; - 51A474309F26DF0E2B50A1005DB6AD6F /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CB64626B8FF205280AB53044A579DF5 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 588F4F95328B4798B75A348B5AF88444 /* CADisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 43042AF73F5EF53C693A92A503A217CE /* CADisplayLink.m */; }; - 58E3B0DC56512E546C886B867CE32E0C /* LOTAnimatableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 78E4C4B20006D429182F57D7947F5D7B /* LOTAnimatableValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B2C095993117B50DD74EA1263665F9C /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 72C33952C2E59ECEE2D4260DDC5E6C13 /* CALayer+Compat.m */; }; - 5C7070E2CFF1068319B3649CB50AA814 /* LOTAnimatableBoundsValue.h in Headers */ = {isa = PBXBuildFile; fileRef = D5D468B9E5C5BA35B8074C1B8F8D2297 /* LOTAnimatableBoundsValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F9651AF911CE8C728095B3EAEC91F9A /* LOTAnimationTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7B738D4C6BD3E45C455EB8F792CB65 /* LOTAnimationTransitionController.m */; }; + 5355B269620DE6BEB27929C3F8121596 /* LOTRectShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2105AB12C448C336745A749D8335BC1A /* LOTRectShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55899D53F6806B83E17FF9C102F4D277 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6879DC7695DB6CB06C1400EF1149D077 /* LOTMaskContainer.m */; }; + 5605CB0EF32FECCE4F3E3FAFF25407B3 /* UIBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D762DC938AEDA894BF2CF888135DE0 /* UIBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 562EF27AACC98CDD5946036EE5F38732 /* LOTEllipseShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E95C4F262758942F1A9CF9A49B222151 /* LOTEllipseShapeLayer.m */; }; + 568C4BCF8F52796A89D31CD7C315D2CC /* lottie-ios-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A9115D95F61A301EB9C832D78CF34899 /* lottie-ios-dummy.m */; }; + 58FD952983A66BAFA31CFC320981FF60 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A39E5924D656A246394EB437D60ED28 /* LOTShapeRepeater.m */; }; + 596D7D0F6FEBD324DDF5932940826405 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B682BCA807F2B684700A0F8FC5C85D4 /* LOTShapeGradientFill.m */; }; + 59CD87778BBFFC16EE4371B2C35CD058 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = D54013053C5CCC8C44F931D80A2297CA /* LOTColorInterpolator.m */; }; + 5A9D5AF1F51D9A5A1D99CDD83F32BC4C /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 12C233DA054B9CDF61275305F701B861 /* LOTLayerGroup.m */; }; + 5AFDBC4CFFDD1E91B66101D58A6381C1 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 770DC890826F8F8EE74B21BDEE2F6088 /* LOTCompositionContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CBEA58EC8541A3575DB567EBC38B735 /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 427B56BFB736CCE2F21F76123424D09C /* LOTAssetGroup.m */; }; + 5DE4EF29672FCEECBF57947EDE0C0629 /* LOTAnimatableScaleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F679E538BBF82A786668E1C0AED2A7 /* LOTAnimatableScaleValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FC42C0B31EE3F3E632BA3B7B0F35028 /* LOTAnimatablePointValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 60086885A5BCAA501609B24A7170C262 /* LOTAnimatablePointValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 60C3C702C40753B60BFC354814085E90 /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = A6B67530EE8891B282567F80EE80BC7B /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6163074ACE701F7F55A813BC1BE9981F /* LOTShapePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 4624DFAF3E57849D8DA66D32CFF6B47A /* LOTShapePath.m */; }; 617784A44D87123A3940DD1AE617F9AF /* UIImage+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C0700543E7DEEC74BEBEA8E5E773A9D /* UIImage+Snapshot.m */; }; - 6530F8342E1B365D2067018819EE5634 /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 15981AEAED90BB00EE8F68A61DEC8375 /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66DA519BDAC71A15D0720F2DC8C17447 /* LOTAnimatableShapeValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 677B639A549FF8AC274FF71BB882E3AA /* LOTAnimatableShapeValue.m */; }; - 6A35555B9AE6F789FE47773CF54E0E5D /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = ECEEC0C38F0CB593A261A272853A5867 /* LOTComposition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6DBF40DE23D672CC5E3D04A006D14E6C /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B20FA362BC7CC34116836CA9BD8FF6AF /* LOTLayer.m */; }; - 6DCDC5FCE0BC9059DB1E5272D785225F /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 99D25FB6CA08D8F054E3322A99CEC718 /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70438051F06B159F8E143D62A3A89CF0 /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = CF5FC1CEA6B8146F33F214CC5CEE3F1E /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7142B71757FA9DDF32B1786573009A30 /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 02DDDEE2317A547C688693827D4F76EB /* LOTShapeFill.m */; }; - 724B26087D0DBE606982A4F242CE54B8 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 4958BAC558BF6C3951301AE1CF47F152 /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74D89F5673E41E38C52F223EEFF8F649 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA75099E263FEEEAC4EABC8DDDC7FEE0 /* Foundation.framework */; }; - 75A82DFCD555EB6742BD40D9DF559BB1 /* lottie-ios-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A9115D95F61A301EB9C832D78CF34899 /* lottie-ios-dummy.m */; }; + 621F25541F1FC75C232F5C7D654868C3 /* LOTAnimatableShapeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C13EAA0D9428744DCCF9A138354C339E /* LOTAnimatableShapeValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63BCB84D02A54EFDB2ED86EE81DD5D46 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = B301189F19192208C4BC02319D6237A9 /* LOTRepeaterRenderer.m */; }; + 656E1E78EED2A36C22C551338CA43BB0 /* CADisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 80582887676814044F9A30B51C310473 /* CADisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67F886D0AC1E9A2F659AB44EC9DA4E14 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 024451EFC279018835D272E48B818A02 /* LOTValueInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D61DBAB5D5EC30FC64F946054455761 /* LOTModels.h in Headers */ = {isa = PBXBuildFile; fileRef = 60736ACC2F6907BAE131D24806248D1F /* LOTModels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7024E8A9CAA9ECCC2FE5871C91DC8035 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 718C64F0A16EB196B9BB2BCED007ED97 /* LOTRenderGroup.m */; }; + 7363EE0A3354C53C7DF29A1B70DED842 /* LOTShapeCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F1311FF14CB73177EAD7213894E0720 /* LOTShapeCircle.m */; }; 76F899637EA5DCFD17A14634468CF2E5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E496C2E8F5310CCD9757EFC3961482B /* UIKit.framework */; }; - 77B7606AB2142A1DD619539FD56E34AC /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = ADA0079C71443D88AC4CD411792901CE /* LOTComposition.m */; }; - 7B9780D72C08BDF08FB3AA14AA598A9A /* LOTShapeFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 140293088C8EF757C1EFAA25F8037D9B /* LOTShapeFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80D5637B3071EB743975C4342E33A03B /* LOTAnimatableShapeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = D8E918D5B2D6419A3AFD7F7124EBE104 /* LOTAnimatableShapeValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 821CC7A28889F9A7CD3BDBC47308CF89 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E445C646535DB2D63FFACBB4B72D0F1 /* LOTAsset.m */; }; - 82E96B12BEDB151A6408DED1F93AB0CE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E496C2E8F5310CCD9757EFC3961482B /* UIKit.framework */; }; - 83B58EAD7AF0CFB7C6336179D3248FDE /* LOTAnimatableLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A4F7D12A242A57D3EF14D1F6616ED9A /* LOTAnimatableLayer.m */; }; - 8A1D16BE93881C36FFDD65537AC0DFFA /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 733BF5458787592E4207097782000CD6 /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7776D93B72C92E94E41D0307E011B49A /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = EF229FA9F71EF572C3792890525CD463 /* LOTShapeStar.m */; }; + 77FC5ED0A9080A0A9D2B055A747076E8 /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C5A1AF0F29CEFD048B024394C3CE0A /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7988932CB4F86771983BFAB7D68A7227 /* LOTShapeLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A6992AFCB744A50C13351D59C90C39 /* LOTShapeLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A078901E9A7EC881CEE453EDC43025D /* LOTAnimationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B4535EA16C6763DF87B7540E9E4F147 /* LOTAnimationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 808DF9C134E54AD97E9FCE06CB5E5375 /* LOTStrokeShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = AE23D9E2E13A5750DB309E67432ECB50 /* LOTStrokeShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82053E79D57EC0CFEE8E8EE02F231313 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 28EDE705E86E898223E5B02AF7D6C12D /* LOTCircleAnimator.m */; }; + 83AD200FEF5E5592A7827A9578CFE2B2 /* LOTShapeFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 2146EAA5ABB0093F6495F7799E3843AB /* LOTShapeFill.m */; }; + 84A31AEA929BB36940DDDDF445B4263A /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F198CED0B0F2149645BBA9436FF7223 /* LOTBezierData.m */; }; + 87718B87BDEB326B821D8E4ECACB0DD8 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = E7624537FD77AC7F6D0495072DFC97C4 /* LOTFillRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 883B15D4C17A50E2E4BE9291B9264987 /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C67112880A34E0C5C4FC687910309 /* LOTFillRenderer.m */; }; + 891E40BAEB8B14C4A384E08E935C590B /* LOTShapeGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 71E43808BF2F4B7E2B29DDBB14F61399 /* LOTShapeGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89334FC1DA4C77CAC8909D87EF128684 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = B8CD561DAB79623733B825EFFD8AB867 /* LOTRoundedRectAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8DC592A79F975885506582EB40824ED1 /* UIApplication+StrictKeyWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = C729EBF50DE6FD37BF3605967C64677D /* UIApplication+StrictKeyWindow.m */; }; - 9151C0E6802A8E79DD383EC22E2F7C31 /* LOTShapeTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BD08E2A92D3B81640EA040F25376E22 /* LOTShapeTransform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 965784FB50F5BB7606E5FB708E84E62C /* LOTEllipseShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B41C434E789596D3AC8800DD2CD307 /* LOTEllipseShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 974152DB404C2F88514A64E4569C6927 /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 38965692E939501A5CDEE82E3AD594FF /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9786CE94CB18CDFD081E9AAAADE80B7A /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = BE892D413DC54440D27EA7561E050CFD /* UIColor+Expanded.m */; }; + 9029B24B7FE5DD1BA2F29176CCED5F59 /* LOTCompositionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B3E6AB2508901C6E5AE75A7AD064025 /* LOTCompositionLayer.m */; }; + 913448A0F276D3B1FAA32C8B969C1977 /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4309C8DAC04CA099C283C2AB8032021A /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9138101BD10F686B48C9137FD9FEB3DF /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = F33892A0C218E3526685E00EDCE9D44C /* LOTSizeInterpolator.m */; }; + 913A04757397B526CCE9CC479BBAE5AA /* LOTAnimatableBoundsValue.m in Sources */ = {isa = PBXBuildFile; fileRef = A0EF753DF361F8B47BF49B5A19FE0E34 /* LOTAnimatableBoundsValue.m */; }; + 91A6D0266BEA10BAD3F68B2EAF9B31E4 /* LOTAnimatableLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 11876A475FC433FD39634C4005E66173 /* LOTAnimatableLayer.m */; }; + 92235AF1854DEBD5B24CA65096733BE7 /* CALayer+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = EC8E985C63BBE42D73D8FA33238D3892 /* CALayer+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93A455FD02D65E477B7B5246D57CBEAB /* LOTGroupLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40490CD1664D47D48DE93DC67829E295 /* LOTGroupLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 94F197C28928E552BE3A61739768B156 /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = AC98FBAB5ED3BF8B2759853AECDABC97 /* LOTCircleAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A69D75147FAD6C01ABCF82D7CD8D778 /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C5DF875EE4C3036D1D01009282459A1B /* CGGeometry+LOTAdditions.m */; }; + 9A8CAF41B7C41F43CFA6BE2BF7CD6212 /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = 10E425F3B3A453F01E5D745DB3649DA9 /* LOTBezierData.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9A9F791039C52486CE245C2244379280 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA75099E263FEEEAC4EABC8DDDC7FEE0 /* Foundation.framework */; }; 9AECEE069E4EEF49ECFE3625D931E122 /* FBSnapshotTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = BE4BF91A4BCF797F2DA527CB177AF682 /* FBSnapshotTestCase.m */; }; - 9D8EC246A6479CED8E570183AAC149B4 /* LOTAnimatableColorValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B8EB4D56150252E86AD80FB5FE8429F /* LOTAnimatableColorValue.m */; }; - 9F02C096864E7A0E13E36B11ECD4AFBE /* LOTLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BED7D9C1303A6F7CEEA162DB076B8C3 /* LOTLayerView.m */; }; - A473029F314F0C90561BA8EE66686143 /* LOTShapeTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BB4F4206F03C1E9E3D2DA3C2E8E246 /* LOTShapeTransform.m */; }; - A4849058E9A6170C9FEFCE8DCF7A7A82 /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C49C86E467436D4F902AFC5C71D3BB4 /* LOTShapeTrimPath.m */; }; - B17FBA00CA088A275C9F4F7BC01BDAFB /* LOTAnimatableScaleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 31367EB37EEEF9556D54F6D970B9D049 /* LOTAnimatableScaleValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5A4141963E33CEAC4734D58DA4A61C8 /* CGGeometry+LOTAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E26948A465DA7F9182A844227BB76FDF /* CGGeometry+LOTAdditions.m */; }; - B813FCC6707ED781FF64F93A6EF6CEDD /* LOTMask.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE092CF70280A949717C5ABFD0ACB22 /* LOTMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8FB6C282DF4080988EC45751AEA9EE4 /* LOTAnimationCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DBEABECC60EE1973EAB4E59395BB25CD /* LOTAnimationCache.m */; }; - BAB4E2BEB14BF995128697B341DC5503 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = EC4019E5FCDE1AD8742EA4B1ACA5437B /* CAAnimationGroup+LOTAnimatableGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB88C8AD1FE0EE86CB270179D733FD2D /* LOTAnimatablePointValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 82BFF6E971134D49A95BD90792C3F292 /* LOTAnimatablePointValue.m */; }; + 9B1C20CB5D44BA93D0BD8768D8215D38 /* LOTLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 67472C1134D5F6DB0085CC49407D8461 /* LOTLayer.m */; }; + 9BB5B721B81652F5DC2232AE5B9638E7 /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = EDED9A97B1CD85DB78400C49203FDAEC /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C7F593BA0CC5275829F382AE1AB183B /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = DF6CD0D228F7A5DA7B3AF23D39EA850F /* LOTPathInterpolator.m */; }; + A0348B85813D196EDBA250DA56CC4E2E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA75099E263FEEEAC4EABC8DDDC7FEE0 /* Foundation.framework */; }; + A1D76422C847E16A0F3323617E161DEC /* LOTShapeLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D43B83A803CB2420FBECBF43368494D /* LOTShapeLayerView.m */; }; + A74C1C20974108DE4B2982EE12DA6175 /* LOTAnimatableNumberValue.m in Sources */ = {isa = PBXBuildFile; fileRef = BFAF903E27FBEEA2D42BCBA037AD5D5C /* LOTAnimatableNumberValue.m */; }; + AA8C91CF4704EFB10F73867DECA0D871 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = B7BB03945C10DB0DB56BCA2AD85C34B4 /* LOTSizeInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB4DA6EE22C52117C52BDA5561A98620 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F43CD8530000A292457084E84C180A6 /* LOTAnimatorNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC168533BEA8CC624C1F39998A9DD7BA /* LOTAnimatableBoundsValue.h in Headers */ = {isa = PBXBuildFile; fileRef = B552BFB6B995B515F164C5D514F9C079 /* LOTAnimatableBoundsValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD1D46C49D8B512C2EF51C3D12DE8060 /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = AC6020C5A9EA4AE89961A435FB8D82B5 /* LOTCompositionContainer.m */; }; + ADCDCA8C7624DC3146FB0A762FBC8644 /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CFD08FD2CEA3A7A21B04522BF501DB2 /* LOTPolystarAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE2D1D55B53461CCC191F27DDC659320 /* LOTEllipseShapeLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 616F96C4045CDCBFCC29E363E093FED0 /* LOTEllipseShapeLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AECC1757619215541B39DB7ECE19FE37 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 50BCAFF7B5A11AF93ACC54842946EC9D /* LOTPointInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B20050BDE3EDE2BADD63969E78B3BD1A /* LOTShapeTrimPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 89AA6602111001BF04ED2FC830EB07BA /* LOTShapeTrimPath.m */; }; + B22C8CF496EAE91943BECAE843393B39 /* CADisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C393C3E74201F262D4E1F8F487DD77 /* CADisplayLink.m */; }; + B36C21D67A26525FBF98BF07AA3E2C5E /* LOTRectShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = F9345055688D3B51AC515BD365576D29 /* LOTRectShapeLayer.m */; }; + B3AE04CCD02FADAC11D9D040AA2024CB /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 23E0FF8B8953A562F7CEE2EE9E137C7F /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4F5446C659EF8100E8885ECA5373E20 /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 424EC1ADC5A4DD375F4FFA4857BF913E /* LOTTrimPathNode.m */; }; + B609734AF3458369BCAAFC099963B559 /* LOTShapeStroke.m in Sources */ = {isa = PBXBuildFile; fileRef = 55A95CDE56AE78E8A569C61A9F0E8A76 /* LOTShapeStroke.m */; }; + B6C4BD1D7A08D8AAF082D1D59B020030 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA183D2B8564B7D4657BA11AF96A848 /* LOTStrokeRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; BBFBA3A6AFF45240FEE4B5783B39FE9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA75099E263FEEEAC4EABC8DDDC7FEE0 /* Foundation.framework */; }; - BC489FFBAA3479CF29C42AEC35C75B53 /* NSValue+Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = B63DBF7F4DED8A6D00EA22B92F2CFEB1 /* NSValue+Compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF6315305F6FB4BA113CB7C1CF3DB989 /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BB7B3ACC2D2613EC78FA39E589DF12D /* CAAnimationGroup+LOTAnimatableGroup.m */; }; - C09E02113BFE904B0BF00E40AA4D4307 /* LOTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E82C6E21269B90CA058C07E04660D53C /* LOTMaskLayer.m */; }; + BCAA6CA019DCBAF48D71CEC31138B22E /* CALayer+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F515135A3E5D6F609BAF68FAAD88A4 /* CALayer+Compat.m */; }; C1278F1281D347E393F458AE28BA16FB /* FBSnapshotTestCasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A4BB743C817BFCE080C119BF765584 /* FBSnapshotTestCasePlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5617D495A50C757EE0F917223243854 /* LOTShapeRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 68DD6E42927FC2D506EF0306BC209102 /* LOTShapeRectangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C14A532F907E7C7F3BA2AA5F78758159 /* LOTGroupLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 283E9C97DA0BDBB7DD63DE77107939CE /* LOTGroupLayerView.m */; }; + C36603E369F52DB26AB28F62F27469F2 /* LOTAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DCB1D1F4DAF388301005B02025CB955E /* LOTAnimationCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C514D285ACE7728EB8591F2C65CF8C1B /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 492F9DA7D21D269CB5502A6E20994B93 /* LOTKeyframe.h */; settings = {ATTRIBUTES = (Project, ); }; }; CB26423766E497E81B5766A6EAA46F11 /* UIApplication+StrictKeyWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 212D3E874316D9872CAAF31F57642B5B /* UIApplication+StrictKeyWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CBD6B5424896E3AB02205D3EBCDE8589 /* LOTShapeLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B8F29A34D48D33230CDDB8E7D9BE52 /* LOTShapeLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CDEB4A230EF1C29D586F636E7930608F /* LOTCompositionLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = B811B6FBCAE84F38CC9C21BD00CFD108 /* LOTCompositionLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2AECA1DB93F7AEEFEF6D57D5B930E1E /* LOTMaskLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = F7FC6FBB374316208B19451FE5AFF8AE /* LOTMaskLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D34AF7C03E8D90AE18128D9443DFA49E /* LOTAnimatableBoundsValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 885EC2653429B2C1EC2F0584CE31CF25 /* LOTAnimatableBoundsValue.m */; }; - D46C6252DF6894C74ED406EEC2F7AA37 /* LOTAnimatablePointValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4A48A03D7C1E9A4210E1B851C79A09 /* LOTAnimatablePointValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB2AA4EFF68A48B5D4CF4B79EEA4DCD1 /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = A86636260338CFC196380F9F44AE0CE7 /* NSValue+Compat.m */; }; + CBDB19E5CFC0C1A2E198AD949FAFBC4A /* LOTRectInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7456711C3969D54DDC00801A9A74D015 /* LOTRectInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC326C0B76796711125441B287E93FC3 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD678A89158F9449758C278080F5ADD /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE74B73F25F2C1F92F54D7954D3BF7E2 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F96D6CF69EB7E42F6D4BDC3ECDB07B4 /* LOTShapeGradientFill.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0838F7AC109217E66EAC9A3BF763B41 /* LOTAssetGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C98CED12DBBC8CAFB257F39C7041DE /* LOTAssetGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D10687448EEB18BAC9DF41E1B242C9D7 /* UIBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = E075B7FB6CD691F0384F6B943CB939F4 /* UIBezierPath.m */; }; + D20E9693142E6F971B72D751CD7E1BF5 /* LOTShapeGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF3F3704EE26DFEDAE1F652504FE43E /* LOTShapeGroup.m */; }; + D410F8E5A57BC127C986FA4418A14F7C /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = A00BD4D96D63206A9FF52D818D75C35F /* LOTRoundedRectAnimator.m */; }; D50A18DC4D72EEA7F237C92F64FE632D /* FBSnapshotTestController.h in Headers */ = {isa = PBXBuildFile; fileRef = 33223A2DBD476B89F9429A641244BEB5 /* FBSnapshotTestController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D53476AF1039009185E5442560BC6B84 /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F4075D6B024EAA593008C4C52FC62A /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; D578D8F734C258FA322ECA2F53930B65 /* FBSnapshotTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = E678584E5002CEB3BB5250E9EA4DDA18 /* FBSnapshotTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D788EFAD255EFD1C0FB7855151FD8019 /* UIBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = C073BC0E55B84351A7D909F103C26CFB /* UIBezierPath.m */; }; - D88DCD024FD2C6E7436FF8E7A9F1E67C /* LOTGroupLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = C4774FA11E80AF5891AEFB3C74BA06F1 /* LOTGroupLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA6C40296B11C3E0DA1C9FD331466716 /* LOTMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 5499A1C23271BB1DE3830424EB0B001A /* LOTMask.m */; }; - DEE21E35007904F5E4882EE19A8439E7 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = C816DF3AB339341FEAD7215FA5021AC8 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E01A3F880F393188851897284E616F88 /* LOTShapeCircle.h in Headers */ = {isa = PBXBuildFile; fileRef = 89DB172AC401BC60B44B7BF2C69C84D2 /* LOTShapeCircle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA689DF73D2B4ED24512B11DDBA39AE5 /* NSValue+Compat.m in Sources */ = {isa = PBXBuildFile; fileRef = 625711C8512C13928984673DEC813608 /* NSValue+Compat.m */; }; + D5A9CFC3AFB164E25E988A108E96C122 /* LOTMaskLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 03DBA567ECEE4F50A6F1709B2050AF22 /* LOTMaskLayer.m */; }; + D87FB440CDD267683664F35CDA3E2F14 /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D67C41AEB18F98AC9174C6653FD5C8E /* LOTTransformInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF99DD2768A9A51C7443E1FA98FCD18E /* LOTShapeRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F9AF79AA1A2F1BA4FC0661E9042D4B /* LOTShapeRectangle.m */; }; + E10509AFDEF0AA6372803CCBC996CB12 /* UIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 03CD1E61FD94A6D06EBD7045DE724D0E /* UIColor.m */; }; + E10F1EC11E49713E3BF5D76D60A1C169 /* LOTShapeTrimPath.h in Headers */ = {isa = PBXBuildFile; fileRef = FCC0193C9B03E43F859BED167EEF7D67 /* LOTShapeTrimPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E140A124860AE8FD11A51E93482260D2 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BC73EBC97DF96436ADA28813269C09D /* LOTRenderNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E410581C278591038359BDC32C919B1B /* LOTAnimatableScaleValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E9F1C7241407B29B84B8ED6457E67C6 /* LOTAnimatableScaleValue.m */; }; + E636154333D2203617AD32BA0970312B /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D66016A7F88BFD23B50668BFC7986E98 /* LOTRenderNode.m */; }; + E79D24EBA29232D562B033490109D8BC /* LOTAnimatableColorValue.h in Headers */ = {isa = PBXBuildFile; fileRef = F11A34CF4522444F849CA802EC26D0E6 /* LOTAnimatableColorValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA15B50C80AD3232A0F1F0CB4D73CD05 /* UIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 133FA197B186848A9B63FCDA4252F08C /* UIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB4A608850120A60601CC73843FAC1C0 /* LOTComposition.m in Sources */ = {isa = PBXBuildFile; fileRef = 668D5AE3DE0FAC14A9683ED2C27DCE24 /* LOTComposition.m */; }; ED7CAF704AF0700F362A56E0E099B9A7 /* UIImage+Diff.m in Sources */ = {isa = PBXBuildFile; fileRef = 95C152A464951E4B71863951DE878A6A /* UIImage+Diff.m */; }; + EE4F2BE88C20FA6B80AA7A4029D56D74 /* LOTComposition.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FA277A5DCCF67AB0E2E3D59274F1722 /* LOTComposition.h */; settings = {ATTRIBUTES = (Project, ); }; }; EECE0F950464CD49B576F2E493A99137 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41342C8431DAAFD900CDBA3C3B840CBB /* QuartzCore.framework */; }; - F0B633447C4935FFAF78FA1B3A3FC8F1 /* UIBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 597B14DB63DE8ACC04DBB3C8781EACE3 /* UIBezierPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F15A7644B57DA972DDDDE13DB429A6F8 /* LOTAssetGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 915154231B2D379CD6ADA48ACB7965D0 /* LOTAssetGroup.m */; }; - F180876FFDE15FDD00997D4EEF4C29EF /* LOTAnimatableNumberValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 77CA5C924D189B67A22F0E617D6A57BD /* LOTAnimatableNumberValue.m */; }; - F2BD1CC6370CD2CA8DA8EFA97BC197BC /* LOTAnimationView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DC471240572119B9619F397A3E45664 /* LOTAnimationView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F31EA277C8E6D1207C31371089E8D34C /* LOTHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A00D8C0ACF36904BF73A8E34DC2303 /* LOTHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F349C06671F2C15846976A3C114649D9 /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 907AE9EFB80E5F2036335EAC3A582763 /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F393DF31D66DBDE91439C1F1C313B839 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D438951D367D7E6B9A52EB39CABFD3C /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF273ED306EE9DDC199F7F288590286D /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BEE8874457A37D7956B8362930D7BF9 /* LOTArrayInterpolator.m */; }; + EF5E8A2A35B247081EDB22D7D51C007B /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 271850BE69D6559EBC18ADD9645AA0F1 /* LOTValueInterpolator.m */; }; + F1B505D7FDEF1F439C1680E27D3ABEC3 /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 02BF230EB92FB15DC3A483F9B2190571 /* LOTTrimPathNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F22D32A68EDBD5273E49C469153E4AD9 /* LOTAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = EE0521F4DA6B788E86AE9157365F1063 /* LOTAnimationView.m */; }; + F2E95DB9A06BAA1CEF284E16892F8CDE /* LOTAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = D29C0614D1061F7ED7BDDD38595FD6BD /* LOTAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F34948B6E71918CA54ABE1BDCA2CD81E /* LOTAnimatableLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 20787EC1D9D0B93D794128F15C003E3B /* LOTAnimatableLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F375C2875AD350705E9D7A6E0FEAF1DC /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = DF7A49AF4103597E6CFF05A31C25A3F1 /* LOTLayerContainer.m */; }; + F46E5820673288FB0301C513825F8819 /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 40BEC0D0735AE75A09CFC65B51BF7279 /* LOTShapeStar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9BD70084950DACA6AD0663158C0A650 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C0D20C2274FCDC5D55C0526BD47052E /* UIColor+Expanded.m */; }; F9D51412103AD03A7C710DA6E8733558 /* Pods-Lottie-Screenshot-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 655D6C341556780E1908F71111873629 /* Pods-Lottie-Screenshot-dummy.m */; }; + FA825542BE668717E8251450A6DF226E /* LOTShapePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A8697D1C19EB7D8F95D315A2744BDC4 /* LOTShapePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FACAA35021A25C93BF8211EE1AD53452 /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = B1CA099F337A29143008AC8CC716C2C1 /* LOTBezierPath.m */; }; + FC99E3BA70A91F36552898A65A7733B9 /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D467855A1ADB57657303082E51897D8 /* LOTPolygonAnimator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD52B34CFEF88A220E1632AC94466BC5 /* LOTAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = F1F08AFD30D5E67627C72642A4649EDA /* LOTAsset.m */; }; FF72B5A5245CB6C6FE58483917DD4C13 /* UIImage+Snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A7FA1EE4820146B1234EEEEDD31489 /* UIImage+Snapshot.h */; settings = {ATTRIBUTES = (Private, ); }; }; + FF8A28FED151586005C0699D9D214CF5 /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E2AF5FCE7B0D07532929104C3E647D /* LOTShapeRepeater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FFCAC920D0C3FBD4329F9A6AF7006746 /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 48158F50C8E881F005B94812F9525BF4 /* LOTPathAnimator.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -134,142 +196,204 @@ isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 017653E2E48B0CC14E4BB5342FB2EE43; + remoteGlobalIDString = E1F93C552124602CE4A9D9A5D61B2C5A; remoteInfo = "lottie-ios"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 01DCDEBBA33B8BCA26A88DF2D44FC34E /* LOTRepeaterRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRepeaterRenderer.h; sourceTree = ""; }; + 024451EFC279018835D272E48B818A02 /* LOTValueInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTValueInterpolator.h; sourceTree = ""; }; 0270CB541F60288863CF0A62758DAD05 /* Pods-Lottie-ScreenshotTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Lottie-ScreenshotTests-acknowledgements.plist"; sourceTree = ""; }; - 02DDDEE2317A547C688693827D4F76EB /* LOTShapeFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeFill.m; sourceTree = ""; }; - 038940E0144433F656A85787AEFC4789 /* LOTLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerView.h; sourceTree = ""; }; + 02BF230EB92FB15DC3A483F9B2190571 /* LOTTrimPathNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTrimPathNode.h; sourceTree = ""; }; + 03CD1E61FD94A6D06EBD7045DE724D0E /* UIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIColor.m; sourceTree = ""; }; + 03DBA567ECEE4F50A6F1709B2050AF22 /* LOTMaskLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskLayer.m; sourceTree = ""; }; 04BB54E959844486243C8F0CCA419960 /* Pods-Lottie-Screenshot-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Screenshot-frameworks.sh"; sourceTree = ""; }; - 05176770DB87B145505D05D41E3452DF /* LOTShapeStroke.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStroke.m; sourceTree = ""; }; - 05364621E18EB334A0BA99ABBA3D859D /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationView.m; sourceTree = ""; }; - 07318C2E4A31ADF8D8C9429B28E7284A /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeCircle.m; sourceTree = ""; }; - 07B596C7B22D9AF68985A746C4924BB6 /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGGeometry+LOTAdditions.h"; sourceTree = ""; }; 0A210C72E6F26E72961614F90732A7D2 /* libPods-Lottie-ScreenshotTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Lottie-ScreenshotTests.a"; path = "libPods-Lottie-ScreenshotTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0D438951D367D7E6B9A52EB39CABFD3C /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationTransitionController.h; sourceTree = ""; }; - 0DC471240572119B9619F397A3E45664 /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Internal.h; sourceTree = ""; }; + 0A8697D1C19EB7D8F95D315A2744BDC4 /* LOTShapePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapePath.h; sourceTree = ""; }; + 0B3E6AB2508901C6E5AE75A7AD064025 /* LOTCompositionLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionLayer.m; sourceTree = ""; }; + 0BC73EBC97DF96436ADA28813269C09D /* LOTRenderNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderNode.h; sourceTree = ""; }; + 0BD75A868065274C17335AA17E5FEF0C /* LOTMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMask.m; sourceTree = ""; }; 0E496C2E8F5310CCD9757EFC3961482B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 0E9F1C7241407B29B84B8ED6457E67C6 /* LOTAnimatableScaleValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableScaleValue.m; sourceTree = ""; }; + 0FA277A5DCCF67AB0E2E3D59274F1722 /* LOTComposition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTComposition.h; sourceTree = ""; }; + 10E425F3B3A453F01E5D745DB3649DA9 /* LOTBezierData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierData.h; sourceTree = ""; }; + 11876A475FC433FD39634C4005E66173 /* LOTAnimatableLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableLayer.m; sourceTree = ""; }; 11E26C61A7F7781A6C9138BBEF1563FA /* lottie-ios.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios.xcconfig"; sourceTree = ""; }; + 12C233DA054B9CDF61275305F701B861 /* LOTLayerGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerGroup.m; sourceTree = ""; }; + 12F515135A3E5D6F609BAF68FAAD88A4 /* CALayer+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CALayer+Compat.m"; sourceTree = ""; }; + 133FA197B186848A9B63FCDA4252F08C /* UIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIColor.h; sourceTree = ""; }; 13B68973EFABFE5144C68CDEB1BCBCB1 /* UIImage+Compare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Compare.m"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.m"; sourceTree = ""; }; - 140293088C8EF757C1EFAA25F8037D9B /* LOTShapeFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeFill.h; sourceTree = ""; }; - 15981AEAED90BB00EE8F68A61DEC8375 /* UIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIColor.h; sourceTree = ""; }; 16A7FA1EE4820146B1234EEEEDD31489 /* UIImage+Snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Snapshot.h"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.h"; sourceTree = ""; }; + 16C492622F543931E0B0C47EA51666F4 /* CAAnimationGroup+LOTAnimatableGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CAAnimationGroup+LOTAnimatableGroup.m"; sourceTree = ""; }; + 191BB6CED6399F9D21431195328D54E5 /* LOTLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerView.m; sourceTree = ""; }; + 1BEE8874457A37D7956B8362930D7BF9 /* LOTArrayInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTArrayInterpolator.m; sourceTree = ""; }; + 1D67C41AEB18F98AC9174C6653FD5C8E /* LOTTransformInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTTransformInterpolator.h; sourceTree = ""; }; + 1F43CD8530000A292457084E84C180A6 /* LOTAnimatorNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatorNode.h; sourceTree = ""; }; + 20787EC1D9D0B93D794128F15C003E3B /* LOTAnimatableLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableLayer.h; sourceTree = ""; }; + 2105AB12C448C336745A749D8335BC1A /* LOTRectShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRectShapeLayer.h; sourceTree = ""; }; 212D3E874316D9872CAAF31F57642B5B /* UIApplication+StrictKeyWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+StrictKeyWindow.h"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.h"; sourceTree = ""; }; + 2146EAA5ABB0093F6495F7799E3843AB /* LOTShapeFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeFill.m; sourceTree = ""; }; + 23E0FF8B8953A562F7CEE2EE9E137C7F /* LOTShapeCircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeCircle.h; sourceTree = ""; }; 24A4BB743C817BFCE080C119BF765584 /* FBSnapshotTestCasePlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCasePlatform.h; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.h; sourceTree = ""; }; - 2CB64626B8FF205280AB53044A579DF5 /* Lottie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Lottie.h; sourceTree = ""; }; - 2E4A48A03D7C1E9A4210E1B851C79A09 /* LOTAnimatablePointValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatablePointValue.h; sourceTree = ""; }; - 31367EB37EEEF9556D54F6D970B9D049 /* LOTAnimatableScaleValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableScaleValue.h; sourceTree = ""; }; + 26083751B6DBC952D1529284554A760E /* LOTMaskLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskLayer.h; sourceTree = ""; }; + 271850BE69D6559EBC18ADD9645AA0F1 /* LOTValueInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTValueInterpolator.m; sourceTree = ""; }; + 283E9C97DA0BDBB7DD63DE77107939CE /* LOTGroupLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGroupLayerView.m; sourceTree = ""; }; + 28EDE705E86E898223E5B02AF7D6C12D /* LOTCircleAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCircleAnimator.m; sourceTree = ""; }; + 2A64611498CB9ED461990C8822268B79 /* LOTShapeFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeFill.h; sourceTree = ""; }; + 2BA183D2B8564B7D4657BA11AF96A848 /* LOTStrokeRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeRenderer.h; sourceTree = ""; }; + 3066BDA57C77299EFE06CE33C104575D /* LOTRenderGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRenderGroup.h; sourceTree = ""; }; 33223A2DBD476B89F9429A641244BEB5 /* FBSnapshotTestController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestController.h; path = FBSnapshotTestCase/FBSnapshotTestController.h; sourceTree = ""; }; - 3560077B1BC8B9E28CDE25159CA9D646 /* LOTAnimatableScaleValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableScaleValue.m; sourceTree = ""; }; 369FCE2DB833E45A299CDB5969B90EB6 /* FBSnapshotTestCase-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSnapshotTestCase-prefix.pch"; sourceTree = ""; }; - 38965692E939501A5CDEE82E3AD594FF /* LOTAnimationCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationCache.h; sourceTree = ""; }; - 3B78C012C08124056B21345F1023272B /* LOTGroupLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGroupLayerView.m; sourceTree = ""; }; 3C32099E0A716483F90035D502A494AC /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 3C9DB2BA605971226D43AEEC7C1B50CB /* LOTLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayer.h; sourceTree = ""; }; - 3ECEA9F0B536624CB4C107A7C4A6A537 /* LOTAnimatableLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableLayer.h; sourceTree = ""; }; - 3F5BFE76B2221E79668085B2455D08F6 /* UIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIColor.m; sourceTree = ""; }; + 3F198CED0B0F2149645BBA9436FF7223 /* LOTBezierData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierData.m; sourceTree = ""; }; + 40490CD1664D47D48DE93DC67829E295 /* LOTGroupLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGroupLayerView.h; sourceTree = ""; }; + 40BEC0D0735AE75A09CFC65B51BF7279 /* LOTShapeStar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStar.h; sourceTree = ""; }; 41342C8431DAAFD900CDBA3C3B840CBB /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 41A00D8C0ACF36904BF73A8E34DC2303 /* LOTHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTHelpers.h; sourceTree = ""; }; - 43042AF73F5EF53C693A92A503A217CE /* CADisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CADisplayLink.m; sourceTree = ""; }; + 424EC1ADC5A4DD375F4FFA4857BF913E /* LOTTrimPathNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTrimPathNode.m; sourceTree = ""; }; + 427B56BFB736CCE2F21F76123424D09C /* LOTAssetGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAssetGroup.m; sourceTree = ""; }; + 4309C8DAC04CA099C283C2AB8032021A /* LOTAnimationView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Internal.h; sourceTree = ""; }; 460BE209217BFF0930B2331436E2C5F1 /* Pods-Lottie-ScreenshotTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-ScreenshotTests-resources.sh"; sourceTree = ""; }; - 4958BAC558BF6C3951301AE1CF47F152 /* LOTAssetGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAssetGroup.h; sourceTree = ""; }; - 4A4F7D12A242A57D3EF14D1F6616ED9A /* LOTAnimatableLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableLayer.m; sourceTree = ""; }; - 4C49C86E467436D4F902AFC5C71D3BB4 /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTrimPath.m; sourceTree = ""; }; - 5499A1C23271BB1DE3830424EB0B001A /* LOTMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMask.m; sourceTree = ""; }; - 597B14DB63DE8ACC04DBB3C8781EACE3 /* UIBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIBezierPath.h; sourceTree = ""; }; - 5B8EB4D56150252E86AD80FB5FE8429F /* LOTAnimatableColorValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableColorValue.m; sourceTree = ""; }; - 5BB7B3ACC2D2613EC78FA39E589DF12D /* CAAnimationGroup+LOTAnimatableGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CAAnimationGroup+LOTAnimatableGroup.m"; sourceTree = ""; }; - 5F7387090D868251A127AAB6C4280807 /* LOTLayerGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerGroup.m; sourceTree = ""; }; - 61866EE2B860BE232DBF27E31260CD9B /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRectangle.m; sourceTree = ""; }; - 625711C8512C13928984673DEC813608 /* NSValue+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSValue+Compat.m"; sourceTree = ""; }; - 64C02EFE2DB9F6A1E2AA3F4E2EB4CFC4 /* LOTCompositionLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionLayer.m; sourceTree = ""; }; + 4624DFAF3E57849D8DA66D32CFF6B47A /* LOTShapePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapePath.m; sourceTree = ""; }; + 46D762DC938AEDA894BF2CF888135DE0 /* UIBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UIBezierPath.h; sourceTree = ""; }; + 48158F50C8E881F005B94812F9525BF4 /* LOTPathAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathAnimator.m; sourceTree = ""; }; + 492F9DA7D21D269CB5502A6E20994B93 /* LOTKeyframe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTKeyframe.h; sourceTree = ""; }; + 4B682BCA807F2B684700A0F8FC5C85D4 /* LOTShapeGradientFill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGradientFill.m; sourceTree = ""; }; + 4C432AF3791036D8B9B89BD9F463DBB3 /* LOTPathInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathInterpolator.h; sourceTree = ""; }; + 4F1311FF14CB73177EAD7213894E0720 /* LOTShapeCircle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeCircle.m; sourceTree = ""; }; + 4F7C346109B17740A2923EFDD3F99719 /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTTransformInterpolator.m; sourceTree = ""; }; + 50BCAFF7B5A11AF93ACC54842946EC9D /* LOTPointInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPointInterpolator.h; sourceTree = ""; }; + 50EB4083DFE620DDF4906E091C6D1751 /* LOTStrokeRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeRenderer.m; sourceTree = ""; }; + 5447235465EC01227DAAAF0A6F415278 /* LOTAnimatorNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatorNode.m; sourceTree = ""; }; + 55A95CDE56AE78E8A569C61A9F0E8A76 /* LOTShapeStroke.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStroke.m; sourceTree = ""; }; + 60086885A5BCAA501609B24A7170C262 /* LOTAnimatablePointValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatablePointValue.h; sourceTree = ""; }; + 60736ACC2F6907BAE131D24806248D1F /* LOTModels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTModels.h; sourceTree = ""; }; + 616F96C4045CDCBFCC29E363E093FED0 /* LOTEllipseShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTEllipseShapeLayer.h; sourceTree = ""; }; + 6549BFD5265F947675B72B5A85B01EDC /* LOTColorInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTColorInterpolator.h; sourceTree = ""; }; 655D6C341556780E1908F71111873629 /* Pods-Lottie-Screenshot-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Lottie-Screenshot-dummy.m"; sourceTree = ""; }; + 66660FA7DF36C33C2FEB06B167145D24 /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTransform.h; sourceTree = ""; }; + 668D5AE3DE0FAC14A9683ED2C27DCE24 /* LOTComposition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTComposition.m; sourceTree = ""; }; 66A25C1B11D426C3DB98F5132098E20F /* liblottie-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "liblottie-ios.a"; path = "liblottie-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 677B639A549FF8AC274FF71BB882E3AA /* LOTAnimatableShapeValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableShapeValue.m; sourceTree = ""; }; - 68DD6E42927FC2D506EF0306BC209102 /* LOTShapeRectangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRectangle.h; sourceTree = ""; }; - 6BED7D9C1303A6F7CEEA162DB076B8C3 /* LOTLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerView.m; sourceTree = ""; }; - 6DD3F8CA54098F443CC46D9A41F78270 /* LOTShapeGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGroup.h; sourceTree = ""; }; - 6E7B738D4C6BD3E45C455EB8F792CB65 /* LOTAnimationTransitionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationTransitionController.m; sourceTree = ""; }; - 72C33952C2E59ECEE2D4260DDC5E6C13 /* CALayer+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CALayer+Compat.m"; sourceTree = ""; }; - 733BF5458787592E4207097782000CD6 /* LOTAnimationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView.h; sourceTree = ""; }; - 7569901E51D990CC036B38B15EBD39F9 /* LOTAnimatableNumberValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableNumberValue.h; sourceTree = ""; }; + 66A9C5B3DC7EFCCE0F58AF0D8045E00C /* LOTPointInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPointInterpolator.m; sourceTree = ""; }; + 67472C1134D5F6DB0085CC49407D8461 /* LOTLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayer.m; sourceTree = ""; }; + 6879DC7695DB6CB06C1400EF1149D077 /* LOTMaskContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskContainer.m; sourceTree = ""; }; + 692C67112880A34E0C5C4FC687910309 /* LOTFillRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTFillRenderer.m; sourceTree = ""; }; + 6A39E5924D656A246394EB437D60ED28 /* LOTShapeRepeater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRepeater.m; sourceTree = ""; }; + 6C8A9F45336DB43A582BA0C6643FCF2A /* LOTArrayInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTArrayInterpolator.h; sourceTree = ""; }; + 6F96D6CF69EB7E42F6D4BDC3ECDB07B4 /* LOTShapeGradientFill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGradientFill.h; sourceTree = ""; }; + 718C64F0A16EB196B9BB2BCED007ED97 /* LOTRenderGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderGroup.m; sourceTree = ""; }; + 71E43808BF2F4B7E2B29DDBB14F61399 /* LOTShapeGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeGroup.h; sourceTree = ""; }; + 722C5C44D4AE0E582F72CB1638885E17 /* LOTPathAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPathAnimator.h; sourceTree = ""; }; + 7456711C3969D54DDC00801A9A74D015 /* LOTRectInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRectInterpolator.h; sourceTree = ""; }; + 75C6789C16F7DC792D600E1018BCDBE0 /* LOTNumberInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTNumberInterpolator.h; sourceTree = ""; }; 75CEFEA58795A32733A5366DC46BE9F4 /* Pods-Lottie-Screenshot.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Screenshot.debug.xcconfig"; sourceTree = ""; }; - 77CA5C924D189B67A22F0E617D6A57BD /* LOTAnimatableNumberValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableNumberValue.m; sourceTree = ""; }; - 78E4C4B20006D429182F57D7947F5D7B /* LOTAnimatableValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableValue.h; sourceTree = ""; }; + 76A7C125C66093A9493256A06EDF3579 /* LOTGradientFillRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGradientFillRender.h; sourceTree = ""; }; + 770DC890826F8F8EE74B21BDEE2F6088 /* LOTCompositionContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionContainer.h; sourceTree = ""; }; + 77A6992AFCB744A50C13351D59C90C39 /* LOTShapeLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeLayerView.h; sourceTree = ""; }; 7B9C6C81252DA3432D727A951677CB8B /* Pods-Lottie-ScreenshotTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-ScreenshotTests-frameworks.sh"; sourceTree = ""; }; 7C0700543E7DEEC74BEBEA8E5E773A9D /* UIImage+Snapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Snapshot.m"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.m"; sourceTree = ""; }; - 7D02D0DA5D34B73A3E203C4F57A3F646 /* LOTModels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTModels.h; sourceTree = ""; }; - 80C463F28C5C272770C4B5D1801F4BF6 /* LOTRectShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRectShapeLayer.m; sourceTree = ""; }; - 82BFF6E971134D49A95BD90792C3F292 /* LOTAnimatablePointValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatablePointValue.m; sourceTree = ""; }; - 8306854ED41D9256D98722F30C695233 /* LOTShapePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapePath.m; sourceTree = ""; }; - 885EC2653429B2C1EC2F0584CE31CF25 /* LOTAnimatableBoundsValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableBoundsValue.m; sourceTree = ""; }; - 89DB172AC401BC60B44B7BF2C69C84D2 /* LOTShapeCircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeCircle.h; sourceTree = ""; }; - 8E445C646535DB2D63FFACBB4B72D0F1 /* LOTAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAsset.m; sourceTree = ""; }; - 907AE9EFB80E5F2036335EAC3A582763 /* LOTShapePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapePath.h; sourceTree = ""; }; - 915154231B2D379CD6ADA48ACB7965D0 /* LOTAssetGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAssetGroup.m; sourceTree = ""; }; + 7F369532B91988E02E39A60BFCD1FBFF /* LOTShapeStroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStroke.h; sourceTree = ""; }; + 7FAA2A30B7324CAB689BF4F0ED28D956 /* LOTAnimatableValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableValue.h; sourceTree = ""; }; + 80582887676814044F9A30B51C310473 /* CADisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CADisplayLink.h; sourceTree = ""; }; + 89AA6602111001BF04ED2FC830EB07BA /* LOTShapeTrimPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTrimPath.m; sourceTree = ""; }; + 8AD678A89158F9449758C278080F5ADD /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationTransitionController.h; sourceTree = ""; }; + 8B7DD4370F42E5CF9B011EA229D9846A /* LOTKeyframe.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTKeyframe.m; sourceTree = ""; }; + 8CFD08FD2CEA3A7A21B04522BF501DB2 /* LOTPolystarAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolystarAnimator.h; sourceTree = ""; }; + 8D266ED5D6437E39A03CEB41537E86BA /* LOTAnimatableColorValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableColorValue.m; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 93BA027A45339A7CBAD75999788DFDB1 /* LOTPlatformCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPlatformCompat.h; sourceTree = ""; }; + 93C98CED12DBBC8CAFB257F39C7041DE /* LOTAssetGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAssetGroup.h; sourceTree = ""; }; + 9596EA5FD08A810B013CEFFD20C3B969 /* LOTAnimationView_Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Compat.h; sourceTree = ""; }; 95C152A464951E4B71863951DE878A6A /* UIImage+Diff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Diff.m"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.m"; sourceTree = ""; }; + 96F9AF79AA1A2F1BA4FC0661E9042D4B /* LOTShapeRectangle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRectangle.m; sourceTree = ""; }; 97CBB2AA6774AC8A48C1906307FBEAD8 /* UIImage+Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Compare.h"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.h"; sourceTree = ""; }; - 98B41C434E789596D3AC8800DD2CD307 /* LOTEllipseShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTEllipseShapeLayer.h; sourceTree = ""; }; 999C515F2D3951E507FD245E96E0F3D1 /* Pods-Lottie-ScreenshotTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Lottie-ScreenshotTests-dummy.m"; sourceTree = ""; }; - 99D25FB6CA08D8F054E3322A99CEC718 /* LOTAnimationView_Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView_Compat.h; sourceTree = ""; }; - 9BD08E2A92D3B81640EA040F25376E22 /* LOTShapeTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTransform.h; sourceTree = ""; }; - A00524CC857D7CAB4512B07E911C576B /* LOTAnimatableColorValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableColorValue.h; sourceTree = ""; }; - A16AFBD73CF204B5EDFFFFA8C591F3B1 /* LOTShapeStroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeStroke.h; sourceTree = ""; }; - A8EB28EDBE333C083789AEB11FC56720 /* CADisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CADisplayLink.h; sourceTree = ""; }; + 9A306D3E602FBA9C425FC3D59A2CDC65 /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationCache.m; sourceTree = ""; }; + 9AD7FC0C844D9C07EC44F09838BD33A9 /* LOTPlatformCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPlatformCompat.h; sourceTree = ""; }; + 9B4535EA16C6763DF87B7540E9E4F147 /* LOTAnimationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationView.h; sourceTree = ""; }; + 9C0D20C2274FCDC5D55C0526BD47052E /* UIColor+Expanded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = ""; }; + 9D43B83A803CB2420FBECBF43368494D /* LOTShapeLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeLayerView.m; sourceTree = ""; }; + 9D467855A1ADB57657303082E51897D8 /* LOTPolygonAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTPolygonAnimator.h; sourceTree = ""; }; + 9DF405402E29A37ABD3295AA01C36673 /* LOTGradientFillRender.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTGradientFillRender.m; sourceTree = ""; }; + A00BD4D96D63206A9FF52D818D75C35F /* LOTRoundedRectAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRoundedRectAnimator.m; sourceTree = ""; }; + A0EF753DF361F8B47BF49B5A19FE0E34 /* LOTAnimatableBoundsValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableBoundsValue.m; sourceTree = ""; }; + A4C393C3E74201F262D4E1F8F487DD77 /* CADisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = CADisplayLink.m; sourceTree = ""; }; + A6B67530EE8891B282567F80EE80BC7B /* LOTShapeRectangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRectangle.h; sourceTree = ""; }; + A8027C5611F7F60898E2FB34ABCB0E37 /* NSValue+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSValue+Compat.h"; sourceTree = ""; }; + A86636260338CFC196380F9F44AE0CE7 /* NSValue+Compat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSValue+Compat.m"; sourceTree = ""; }; A9115D95F61A301EB9C832D78CF34899 /* lottie-ios-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-dummy.m"; sourceTree = ""; }; A99B8DAB9F51200CB9A72818F3409F17 /* lottie-ios-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-prefix.pch"; sourceTree = ""; }; - ADA0079C71443D88AC4CD411792901CE /* LOTComposition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTComposition.m; sourceTree = ""; }; + AB61BC9522B70516DE0276A51656BAC7 /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerGroup.h; sourceTree = ""; }; + AB6C67B6533F446F604A43CD9ABD3E9C /* CAAnimationGroup+LOTAnimatableGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CAAnimationGroup+LOTAnimatableGroup.h"; sourceTree = ""; }; + ABC5322242F1BA347692C7C72699B119 /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIColor+Expanded.h"; sourceTree = ""; }; + AC6020C5A9EA4AE89961A435FB8D82B5 /* LOTCompositionContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionContainer.m; sourceTree = ""; }; + AC87C273F9943D70F84793A27BA712B5 /* LOTAnimationTransitionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationTransitionController.m; sourceTree = ""; }; + AC98FBAB5ED3BF8B2759853AECDABC97 /* LOTCircleAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCircleAnimator.h; sourceTree = ""; }; + AD750771DCEF51993F26E0D049B7F757 /* LOTShapeTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTransform.m; sourceTree = ""; }; ADAEE9C9AB5CB4F9C0C3B8F95476B0B3 /* FBSnapshotTestCase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSnapshotTestCase.xcconfig; sourceTree = ""; }; + AE23D9E2E13A5750DB309E67432ECB50 /* LOTStrokeShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeShapeLayer.h; sourceTree = ""; }; AFD73DA215516DDC488B29056334410D /* Pods-Lottie-Screenshot-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Lottie-Screenshot-acknowledgements.plist"; sourceTree = ""; }; - B20FA362BC7CC34116836CA9BD8FF6AF /* LOTLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayer.m; sourceTree = ""; }; + B058FEF8C4B8A14CF2BE9CF726BA996A /* LOTMaskContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskContainer.h; sourceTree = ""; }; + B1CA099F337A29143008AC8CC716C2C1 /* LOTBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTBezierPath.m; sourceTree = ""; }; B266830476FF524C73B006D4CA677519 /* Pods-Lottie-Screenshot-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Lottie-Screenshot-resources.sh"; sourceTree = ""; }; - B63DBF7F4DED8A6D00EA22B92F2CFEB1 /* NSValue+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSValue+Compat.h"; sourceTree = ""; }; - B6BB4F4206F03C1E9E3D2DA3C2E8E246 /* LOTShapeTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeTransform.m; sourceTree = ""; }; - B811B6FBCAE84F38CC9C21BD00CFD108 /* LOTCompositionLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionLayer.h; sourceTree = ""; }; - BCE092CF70280A949717C5ABFD0ACB22 /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMask.h; sourceTree = ""; }; - BE2BCC7714B0D364A21645462B39FF66 /* LOTStrokeShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTStrokeShapeLayer.h; sourceTree = ""; }; + B301189F19192208C4BC02319D6237A9 /* LOTRepeaterRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRepeaterRenderer.m; sourceTree = ""; }; + B42C26D498EB84442579B747AD8DA9A8 /* LOTStrokeShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeShapeLayer.m; sourceTree = ""; }; + B552BFB6B995B515F164C5D514F9C079 /* LOTAnimatableBoundsValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableBoundsValue.h; sourceTree = ""; }; + B7BB03945C10DB0DB56BCA2AD85C34B4 /* LOTSizeInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTSizeInterpolator.h; sourceTree = ""; }; + B8CD561DAB79623733B825EFFD8AB867 /* LOTRoundedRectAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRoundedRectAnimator.h; sourceTree = ""; }; + BB623264EACAA94F9AC3EDC3F3A53ED9 /* LOTLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayer.h; sourceTree = ""; }; + BCF3F3704EE26DFEDAE1F652504FE43E /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGroup.m; sourceTree = ""; }; + BD7C385486A19B65B6DE24BF76B9E61D /* LOTRectInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRectInterpolator.m; sourceTree = ""; }; BE4BF91A4BCF797F2DA527CB177AF682 /* FBSnapshotTestCase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCase.m; path = FBSnapshotTestCase/FBSnapshotTestCase.m; sourceTree = ""; }; - BE892D413DC54440D27EA7561E050CFD /* UIColor+Expanded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = ""; }; - C073BC0E55B84351A7D909F103C26CFB /* UIBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIBezierPath.m; sourceTree = ""; }; - C1B8F29A34D48D33230CDDB8E7D9BE52 /* LOTShapeLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeLayerView.h; sourceTree = ""; }; + BFAF903E27FBEEA2D42BCBA037AD5D5C /* LOTAnimatableNumberValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableNumberValue.m; sourceTree = ""; }; + C13EAA0D9428744DCCF9A138354C339E /* LOTAnimatableShapeValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableShapeValue.h; sourceTree = ""; }; + C24A18AB03738A6E4063A1867A01CFBE /* LOTAnimatableShapeValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatableShapeValue.m; sourceTree = ""; }; C455C5504591B2DCDC72B6EADCE5ED06 /* libFBSnapshotTestCase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFBSnapshotTestCase.a; path = libFBSnapshotTestCase.a; sourceTree = BUILT_PRODUCTS_DIR; }; - C4774FA11E80AF5891AEFB3C74BA06F1 /* LOTGroupLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTGroupLayerView.h; sourceTree = ""; }; + C5BA4D7F1DE62F8B8D34F2F1ADE84A2B /* LOTPolygonAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolygonAnimator.m; sourceTree = ""; }; + C5DF875EE4C3036D1D01009282459A1B /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry+LOTAdditions.m"; sourceTree = ""; }; C729EBF50DE6FD37BF3605967C64677D /* UIApplication+StrictKeyWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+StrictKeyWindow.m"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.m"; sourceTree = ""; }; - C816DF3AB339341FEAD7215FA5021AC8 /* LOTShapeTrimPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTrimPath.h; sourceTree = ""; }; CA88547526037C5BAC70D04DCEED9DEA /* Pods-Lottie-ScreenshotTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-ScreenshotTests.release.xcconfig"; sourceTree = ""; }; CB46A245C6AD3A25E1D578D0AA2B875D /* Pods-Lottie-ScreenshotTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Lottie-ScreenshotTests-acknowledgements.markdown"; sourceTree = ""; }; - CCCF8665CEAF126BB717C90B0C56BD9E /* LOTStrokeShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeShapeLayer.m; sourceTree = ""; }; CCDF5A3F7DAEA1255A1B399D8AAE1B8D /* FBSnapshotTestController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestController.m; path = FBSnapshotTestCase/FBSnapshotTestController.m; sourceTree = ""; }; - CF5FC1CEA6B8146F33F214CC5CEE3F1E /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CALayer+Compat.h"; sourceTree = ""; }; - D1604BD778526A0036FC6B8B35E44307 /* LOTRectShapeLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTRectShapeLayer.h; sourceTree = ""; }; + CE1627A3686A013A4978B277820D892B /* LOTLayerContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerContainer.h; sourceTree = ""; }; + D29C0614D1061F7ED7BDDD38595FD6BD /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAsset.h; sourceTree = ""; }; + D2F679E538BBF82A786668E1C0AED2A7 /* LOTAnimatableScaleValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableScaleValue.h; sourceTree = ""; }; D3A198E7445EB9E2BDA4B311FBFE135E /* Pods-Lottie-Screenshot.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-Screenshot.release.xcconfig"; sourceTree = ""; }; - D5D468B9E5C5BA35B8074C1B8F8D2297 /* LOTAnimatableBoundsValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableBoundsValue.h; sourceTree = ""; }; - D8E918D5B2D6419A3AFD7F7124EBE104 /* LOTAnimatableShapeValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableShapeValue.h; sourceTree = ""; }; + D52F7E5EF7C31319E0D0E2CB1978F495 /* LOTAnimatableNumberValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableNumberValue.h; sourceTree = ""; }; + D54013053C5CCC8C44F931D80A2297CA /* LOTColorInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTColorInterpolator.m; sourceTree = ""; }; + D66016A7F88BFD23B50668BFC7986E98 /* LOTRenderNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRenderNode.m; sourceTree = ""; }; + D6E2AF5FCE7B0D07532929104C3E647D /* LOTShapeRepeater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeRepeater.h; sourceTree = ""; }; DA75099E263FEEEAC4EABC8DDDC7FEE0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - DBEABECC60EE1973EAB4E59395BB25CD /* LOTAnimationCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationCache.m; sourceTree = ""; }; + DCB1D1F4DAF388301005B02025CB955E /* LOTAnimationCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimationCache.h; sourceTree = ""; }; + DF6CD0D228F7A5DA7B3AF23D39EA850F /* LOTPathInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPathInterpolator.m; sourceTree = ""; }; + DF7A49AF4103597E6CFF05A31C25A3F1 /* LOTLayerContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTLayerContainer.m; sourceTree = ""; }; E066A4D208CF4D968A2E3F91565F92D5 /* Pods-Lottie-ScreenshotTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Lottie-ScreenshotTests.debug.xcconfig"; sourceTree = ""; }; + E075B7FB6CD691F0384F6B943CB939F4 /* UIBezierPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UIBezierPath.m; sourceTree = ""; }; E09DE45901F0746BBFF1DCE9EE718B4F /* FBSnapshotTestCase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSnapshotTestCase-dummy.m"; sourceTree = ""; }; - E26948A465DA7F9182A844227BB76FDF /* CGGeometry+LOTAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry+LOTAdditions.m"; sourceTree = ""; }; - E423746CD8AC8E3A0848266FE6443731 /* LOTShapeLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeLayerView.m; sourceTree = ""; }; - E4CDC2607337D2B22E81EA58572A8ADA /* LOTShapeGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGroup.m; sourceTree = ""; }; + E3A46641CC627983D2FE35AB06922B67 /* LOTNumberInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTNumberInterpolator.m; sourceTree = ""; }; + E63DC8FB2D30F5FB6CC3946BE1B5C0B0 /* LOTBezierPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTBezierPath.h; sourceTree = ""; }; E678584E5002CEB3BB5250E9EA4DDA18 /* FBSnapshotTestCase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCase.h; path = FBSnapshotTestCase/FBSnapshotTestCase.h; sourceTree = ""; }; - E82C6E21269B90CA058C07E04660D53C /* LOTMaskLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTMaskLayer.m; sourceTree = ""; }; - EA73364B20DF118492F5374D5C5F015A /* UIColor+Expanded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIColor+Expanded.h"; sourceTree = ""; }; - EADB4AC5A4CCC033F65AA351B6F35992 /* LOTEllipseShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTEllipseShapeLayer.m; sourceTree = ""; }; - EC4019E5FCDE1AD8742EA4B1ACA5437B /* CAAnimationGroup+LOTAnimatableGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CAAnimationGroup+LOTAnimatableGroup.h"; sourceTree = ""; }; - ECEEC0C38F0CB593A261A272853A5867 /* LOTComposition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTComposition.h; sourceTree = ""; }; - ED1DD07E19C76E929D5FFBE8B540B6C9 /* LOTLayerGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerGroup.h; sourceTree = ""; }; + E7624537FD77AC7F6D0495072DFC97C4 /* LOTFillRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTFillRenderer.h; sourceTree = ""; }; + E93B1D40A93436398AF303D940D384CB /* LOTLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTLayerView.h; sourceTree = ""; }; + E95C4F262758942F1A9CF9A49B222151 /* LOTEllipseShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTEllipseShapeLayer.m; sourceTree = ""; }; + E9A78C529B916D0520F561DFDD9241C2 /* LOTPolystarAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTPolystarAnimator.m; sourceTree = ""; }; + EA996A8184E315E8098EAADC79406D26 /* CGGeometry+LOTAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGGeometry+LOTAdditions.h"; sourceTree = ""; }; + EBFA2138BAD3E671C01441176B9B9C3A /* LOTHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTHelpers.h; sourceTree = ""; }; + EC8E985C63BBE42D73D8FA33238D3892 /* CALayer+Compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CALayer+Compat.h"; sourceTree = ""; }; + EDED9A97B1CD85DB78400C49203FDAEC /* Lottie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Lottie.h; sourceTree = ""; }; + EE0521F4DA6B788E86AE9157365F1063 /* LOTAnimationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimationView.m; sourceTree = ""; }; EE3796BCB273D97B31BD1626ABAFE5FB /* libPods-Lottie-Screenshot.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Lottie-Screenshot.a"; path = "libPods-Lottie-Screenshot.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F0F4075D6B024EAA593008C4C52FC62A /* LOTAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAsset.h; sourceTree = ""; }; + EF229FA9F71EF572C3792890525CD463 /* LOTShapeStar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStar.m; sourceTree = ""; }; + F11A34CF4522444F849CA802EC26D0E6 /* LOTAnimatableColorValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTAnimatableColorValue.h; sourceTree = ""; }; + F1F08AFD30D5E67627C72642A4649EDA /* LOTAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAsset.m; sourceTree = ""; }; + F33892A0C218E3526685E00EDCE9D44C /* LOTSizeInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTSizeInterpolator.m; sourceTree = ""; }; + F3D1DCAF1845418A4B1EBF2B7DE82FA4 /* LOTCompositionLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTCompositionLayer.h; sourceTree = ""; }; + F5C5A1AF0F29CEFD048B024394C3CE0A /* LOTMask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMask.h; sourceTree = ""; }; F618D9733DD8305110C756D87765C45E /* Pods-Lottie-Screenshot-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Lottie-Screenshot-acknowledgements.markdown"; sourceTree = ""; }; - F7FC6FBB374316208B19451FE5AFF8AE /* LOTMaskLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTMaskLayer.h; sourceTree = ""; }; + F83A6EA50DAA891141D4479AC44D9F07 /* LOTAnimatablePointValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTAnimatablePointValue.m; sourceTree = ""; }; F8F7C7C75CB8DB00E995AF6F8293409A /* UIImage+Diff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Diff.h"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.h"; sourceTree = ""; }; + F9345055688D3B51AC515BD365576D29 /* LOTRectShapeLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = LOTRectShapeLayer.m; sourceTree = ""; }; F9FD642016AA39DDF7D9B92D3C8E1F1C /* FBSnapshotTestCasePlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCasePlatform.m; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.m; sourceTree = ""; }; + FCC0193C9B03E43F859BED167EEF7D67 /* LOTShapeTrimPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LOTShapeTrimPath.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -292,20 +416,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 99BA8D0941DB45290AB12DAE9DFE5F5E /* Frameworks */ = { + 9A2457899FF7DBBABE13EA6F85CBFA8C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 74D89F5673E41E38C52F223EEFF8F649 /* Foundation.framework in Frameworks */, - 82E96B12BEDB151A6408DED1F93AB0CE /* UIKit.framework in Frameworks */, + 160AA8672CFFE0695070CE13081F9C0E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9A2457899FF7DBBABE13EA6F85CBFA8C /* Frameworks */ = { + A805EE485786AAF7F08E2684E5352955 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 160AA8672CFFE0695070CE13081F9C0E /* Foundation.framework in Frameworks */, + A0348B85813D196EDBA250DA56CC4E2E /* Foundation.framework in Frameworks */, + 3CD0B0C22FD4844218A2B7B3A80CBFB7 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -323,6 +447,16 @@ name = Products; sourceTree = ""; }; + 05761C42643EE4EC6FA0D5D5019ED552 /* ManipulatorNodes */ = { + isa = PBXGroup; + children = ( + 02BF230EB92FB15DC3A483F9B2190571 /* LOTTrimPathNode.h */, + 424EC1ADC5A4DD375F4FFA4857BF913E /* LOTTrimPathNode.m */, + ); + name = ManipulatorNodes; + path = ManipulatorNodes; + sourceTree = ""; + }; 05AA9A436737A6FB5593F8F36D0346FC /* FBSnapshotTestCase */ = { isa = PBXGroup; children = ( @@ -333,23 +467,46 @@ path = FBSnapshotTestCase; sourceTree = ""; }; - 07E2ED49ABBB3C7E295856ACEFB91B50 /* MacCompatability */ = { + 05FD4FD0004E1E27B055A31218E877D4 /* Extensions */ = { isa = PBXGroup; children = ( - A8EB28EDBE333C083789AEB11FC56720 /* CADisplayLink.h */, - 43042AF73F5EF53C693A92A503A217CE /* CADisplayLink.m */, - CF5FC1CEA6B8146F33F214CC5CEE3F1E /* CALayer+Compat.h */, - 72C33952C2E59ECEE2D4260DDC5E6C13 /* CALayer+Compat.m */, - 93BA027A45339A7CBAD75999788DFDB1 /* LOTPlatformCompat.h */, - B63DBF7F4DED8A6D00EA22B92F2CFEB1 /* NSValue+Compat.h */, - 625711C8512C13928984673DEC813608 /* NSValue+Compat.m */, - 597B14DB63DE8ACC04DBB3C8781EACE3 /* UIBezierPath.h */, - C073BC0E55B84351A7D909F103C26CFB /* UIBezierPath.m */, - 15981AEAED90BB00EE8F68A61DEC8375 /* UIColor.h */, - 3F5BFE76B2221E79668085B2455D08F6 /* UIColor.m */, + AB6C67B6533F446F604A43CD9ABD3E9C /* CAAnimationGroup+LOTAnimatableGroup.h */, + 16C492622F543931E0B0C47EA51666F4 /* CAAnimationGroup+LOTAnimatableGroup.m */, + EA996A8184E315E8098EAADC79406D26 /* CGGeometry+LOTAdditions.h */, + C5DF875EE4C3036D1D01009282459A1B /* CGGeometry+LOTAdditions.m */, + E63DC8FB2D30F5FB6CC3946BE1B5C0B0 /* LOTBezierPath.h */, + B1CA099F337A29143008AC8CC716C2C1 /* LOTBezierPath.m */, + EBFA2138BAD3E671C01441176B9B9C3A /* LOTHelpers.h */, + ABC5322242F1BA347692C7C72699B119 /* UIColor+Expanded.h */, + 9C0D20C2274FCDC5D55C0526BD47052E /* UIColor+Expanded.m */, ); - name = MacCompatability; - path = MacCompatability; + name = Extensions; + path = Extensions; + sourceTree = ""; + }; + 0C018AE4C1DA5F7915D52E68BB03C2A4 /* AnimatableProperties */ = { + isa = PBXGroup; + children = ( + B552BFB6B995B515F164C5D514F9C079 /* LOTAnimatableBoundsValue.h */, + A0EF753DF361F8B47BF49B5A19FE0E34 /* LOTAnimatableBoundsValue.m */, + F11A34CF4522444F849CA802EC26D0E6 /* LOTAnimatableColorValue.h */, + 8D266ED5D6437E39A03CEB41537E86BA /* LOTAnimatableColorValue.m */, + D52F7E5EF7C31319E0D0E2CB1978F495 /* LOTAnimatableNumberValue.h */, + BFAF903E27FBEEA2D42BCBA037AD5D5C /* LOTAnimatableNumberValue.m */, + 60086885A5BCAA501609B24A7170C262 /* LOTAnimatablePointValue.h */, + F83A6EA50DAA891141D4479AC44D9F07 /* LOTAnimatablePointValue.m */, + D2F679E538BBF82A786668E1C0AED2A7 /* LOTAnimatableScaleValue.h */, + 0E9F1C7241407B29B84B8ED6457E67C6 /* LOTAnimatableScaleValue.m */, + C13EAA0D9428744DCCF9A138354C339E /* LOTAnimatableShapeValue.h */, + C24A18AB03738A6E4063A1867A01CFBE /* LOTAnimatableShapeValue.m */, + 7FAA2A30B7324CAB689BF4F0ED28D956 /* LOTAnimatableValue.h */, + 10E425F3B3A453F01E5D745DB3649DA9 /* LOTBezierData.h */, + 3F198CED0B0F2149645BBA9436FF7223 /* LOTBezierData.m */, + 492F9DA7D21D269CB5502A6E20994B93 /* LOTKeyframe.h */, + 8B7DD4370F42E5CF9B011EA229D9846A /* LOTKeyframe.m */, + ); + name = AnimatableProperties; + path = AnimatableProperties; sourceTree = ""; }; 14B8B9B15ECBE87983FF987239AB2D7B /* Frameworks */ = { @@ -360,33 +517,98 @@ name = Frameworks; sourceTree = ""; }; - 21828EA87374AE11CE01F069C9D4840F /* AnimatableProperties */ = { + 2ADEF712DEDD368B85A345B9C57A33CE /* Models */ = { isa = PBXGroup; children = ( - D5D468B9E5C5BA35B8074C1B8F8D2297 /* LOTAnimatableBoundsValue.h */, - 885EC2653429B2C1EC2F0584CE31CF25 /* LOTAnimatableBoundsValue.m */, - A00524CC857D7CAB4512B07E911C576B /* LOTAnimatableColorValue.h */, - 5B8EB4D56150252E86AD80FB5FE8429F /* LOTAnimatableColorValue.m */, - 7569901E51D990CC036B38B15EBD39F9 /* LOTAnimatableNumberValue.h */, - 77CA5C924D189B67A22F0E617D6A57BD /* LOTAnimatableNumberValue.m */, - 2E4A48A03D7C1E9A4210E1B851C79A09 /* LOTAnimatablePointValue.h */, - 82BFF6E971134D49A95BD90792C3F292 /* LOTAnimatablePointValue.m */, - 31367EB37EEEF9556D54F6D970B9D049 /* LOTAnimatableScaleValue.h */, - 3560077B1BC8B9E28CDE25159CA9D646 /* LOTAnimatableScaleValue.m */, - D8E918D5B2D6419A3AFD7F7124EBE104 /* LOTAnimatableShapeValue.h */, - 677B639A549FF8AC274FF71BB882E3AA /* LOTAnimatableShapeValue.m */, - 78E4C4B20006D429182F57D7947F5D7B /* LOTAnimatableValue.h */, + D29C0614D1061F7ED7BDDD38595FD6BD /* LOTAsset.h */, + F1F08AFD30D5E67627C72642A4649EDA /* LOTAsset.m */, + 93C98CED12DBBC8CAFB257F39C7041DE /* LOTAssetGroup.h */, + 427B56BFB736CCE2F21F76123424D09C /* LOTAssetGroup.m */, + 0FA277A5DCCF67AB0E2E3D59274F1722 /* LOTComposition.h */, + 668D5AE3DE0FAC14A9683ED2C27DCE24 /* LOTComposition.m */, + BB623264EACAA94F9AC3EDC3F3A53ED9 /* LOTLayer.h */, + 67472C1134D5F6DB0085CC49407D8461 /* LOTLayer.m */, + AB61BC9522B70516DE0276A51656BAC7 /* LOTLayerGroup.h */, + 12C233DA054B9CDF61275305F701B861 /* LOTLayerGroup.m */, + F5C5A1AF0F29CEFD048B024394C3CE0A /* LOTMask.h */, + 0BD75A868065274C17335AA17E5FEF0C /* LOTMask.m */, + 60736ACC2F6907BAE131D24806248D1F /* LOTModels.h */, + 23E0FF8B8953A562F7CEE2EE9E137C7F /* LOTShapeCircle.h */, + 4F1311FF14CB73177EAD7213894E0720 /* LOTShapeCircle.m */, + 2A64611498CB9ED461990C8822268B79 /* LOTShapeFill.h */, + 2146EAA5ABB0093F6495F7799E3843AB /* LOTShapeFill.m */, + 6F96D6CF69EB7E42F6D4BDC3ECDB07B4 /* LOTShapeGradientFill.h */, + 4B682BCA807F2B684700A0F8FC5C85D4 /* LOTShapeGradientFill.m */, + 71E43808BF2F4B7E2B29DDBB14F61399 /* LOTShapeGroup.h */, + BCF3F3704EE26DFEDAE1F652504FE43E /* LOTShapeGroup.m */, + 0A8697D1C19EB7D8F95D315A2744BDC4 /* LOTShapePath.h */, + 4624DFAF3E57849D8DA66D32CFF6B47A /* LOTShapePath.m */, + A6B67530EE8891B282567F80EE80BC7B /* LOTShapeRectangle.h */, + 96F9AF79AA1A2F1BA4FC0661E9042D4B /* LOTShapeRectangle.m */, + D6E2AF5FCE7B0D07532929104C3E647D /* LOTShapeRepeater.h */, + 6A39E5924D656A246394EB437D60ED28 /* LOTShapeRepeater.m */, + 40BEC0D0735AE75A09CFC65B51BF7279 /* LOTShapeStar.h */, + EF229FA9F71EF572C3792890525CD463 /* LOTShapeStar.m */, + 7F369532B91988E02E39A60BFCD1FBFF /* LOTShapeStroke.h */, + 55A95CDE56AE78E8A569C61A9F0E8A76 /* LOTShapeStroke.m */, + 66660FA7DF36C33C2FEB06B167145D24 /* LOTShapeTransform.h */, + AD750771DCEF51993F26E0D049B7F757 /* LOTShapeTransform.m */, + FCC0193C9B03E43F859BED167EEF7D67 /* LOTShapeTrimPath.h */, + 89AA6602111001BF04ED2FC830EB07BA /* LOTShapeTrimPath.m */, ); - name = AnimatableProperties; - path = AnimatableProperties; + name = Models; + path = Models; + sourceTree = ""; + }; + 31BAF7BF27A617C062218EAE277BA96F /* InterpolatorNodes */ = { + isa = PBXGroup; + children = ( + 6C8A9F45336DB43A582BA0C6643FCF2A /* LOTArrayInterpolator.h */, + 1BEE8874457A37D7956B8362930D7BF9 /* LOTArrayInterpolator.m */, + 6549BFD5265F947675B72B5A85B01EDC /* LOTColorInterpolator.h */, + D54013053C5CCC8C44F931D80A2297CA /* LOTColorInterpolator.m */, + 75C6789C16F7DC792D600E1018BCDBE0 /* LOTNumberInterpolator.h */, + E3A46641CC627983D2FE35AB06922B67 /* LOTNumberInterpolator.m */, + 4C432AF3791036D8B9B89BD9F463DBB3 /* LOTPathInterpolator.h */, + DF6CD0D228F7A5DA7B3AF23D39EA850F /* LOTPathInterpolator.m */, + 50BCAFF7B5A11AF93ACC54842946EC9D /* LOTPointInterpolator.h */, + 66A9C5B3DC7EFCCE0F58AF0D8045E00C /* LOTPointInterpolator.m */, + 7456711C3969D54DDC00801A9A74D015 /* LOTRectInterpolator.h */, + BD7C385486A19B65B6DE24BF76B9E61D /* LOTRectInterpolator.m */, + B7BB03945C10DB0DB56BCA2AD85C34B4 /* LOTSizeInterpolator.h */, + F33892A0C218E3526685E00EDCE9D44C /* LOTSizeInterpolator.m */, + 1D67C41AEB18F98AC9174C6653FD5C8E /* LOTTransformInterpolator.h */, + 4F7C346109B17740A2923EFDD3F99719 /* LOTTransformInterpolator.m */, + 024451EFC279018835D272E48B818A02 /* LOTValueInterpolator.h */, + 271850BE69D6559EBC18ADD9645AA0F1 /* LOTValueInterpolator.m */, + ); + name = InterpolatorNodes; + path = InterpolatorNodes; sourceTree = ""; }; - 38DB89C3AF09DFFB4508ECB274C3D42A /* Private */ = { + 38A2BAF9B32CD4FC0CAD7D1DB55FFF9B /* Classes */ = { isa = PBXGroup; children = ( - 6E7B738D4C6BD3E45C455EB8F792CB65 /* LOTAnimationTransitionController.m */, - 05364621E18EB334A0BA99ABBA3D859D /* LOTAnimationView.m */, - 0DC471240572119B9619F397A3E45664 /* LOTAnimationView_Internal.h */, + 79601C09C034B318B09A158303BC889C /* AnimatableLayers */, + 0C018AE4C1DA5F7915D52E68BB03C2A4 /* AnimatableProperties */, + D1E2A2BD258A867C7FF5DF97318F0DD1 /* AnimationCache */, + 05FD4FD0004E1E27B055A31218E877D4 /* Extensions */, + E665EEA4606FCA6DA276E5502C050542 /* MacCompatability */, + 2ADEF712DEDD368B85A345B9C57A33CE /* Models */, + 4B3D7FBD1C1C9F808AE9C596AF04F469 /* Private */, + E6B461E474E834CC617D31B37BF73063 /* PublicHeaders */, + 55474B82F4B6632F24CA8EE70BB01D42 /* RenderSystem */, + ); + name = Classes; + path = Classes; + sourceTree = ""; + }; + 4B3D7FBD1C1C9F808AE9C596AF04F469 /* Private */ = { + isa = PBXGroup; + children = ( + AC87C273F9943D70F84793A27BA712B5 /* LOTAnimationTransitionController.m */, + EE0521F4DA6B788E86AE9157365F1063 /* LOTAnimationView.m */, + 4309C8DAC04CA099C283C2AB8032021A /* LOTAnimationView_Internal.h */, ); name = Private; path = Private; @@ -407,6 +629,40 @@ path = "Target Support Files/Pods-Lottie-ScreenshotTests"; sourceTree = ""; }; + 55474B82F4B6632F24CA8EE70BB01D42 /* RenderSystem */ = { + isa = PBXGroup; + children = ( + 1F43CD8530000A292457084E84C180A6 /* LOTAnimatorNode.h */, + 5447235465EC01227DAAAF0A6F415278 /* LOTAnimatorNode.m */, + 0BC73EBC97DF96436ADA28813269C09D /* LOTRenderNode.h */, + D66016A7F88BFD23B50668BFC7986E98 /* LOTRenderNode.m */, + 56AA257C8362C2067E79A32662CCDC71 /* AnimatorNodes */, + 31BAF7BF27A617C062218EAE277BA96F /* InterpolatorNodes */, + 05761C42643EE4EC6FA0D5D5019ED552 /* ManipulatorNodes */, + 6E7F29B9B94FAE1F3FA2BF52F0DC2C70 /* RenderNodes */, + ); + name = RenderSystem; + path = RenderSystem; + sourceTree = ""; + }; + 56AA257C8362C2067E79A32662CCDC71 /* AnimatorNodes */ = { + isa = PBXGroup; + children = ( + AC98FBAB5ED3BF8B2759853AECDABC97 /* LOTCircleAnimator.h */, + 28EDE705E86E898223E5B02AF7D6C12D /* LOTCircleAnimator.m */, + 722C5C44D4AE0E582F72CB1638885E17 /* LOTPathAnimator.h */, + 48158F50C8E881F005B94812F9525BF4 /* LOTPathAnimator.m */, + 9D467855A1ADB57657303082E51897D8 /* LOTPolygonAnimator.h */, + C5BA4D7F1DE62F8B8D34F2F1ADE84A2B /* LOTPolygonAnimator.m */, + 8CFD08FD2CEA3A7A21B04522BF501DB2 /* LOTPolystarAnimator.h */, + E9A78C529B916D0520F561DFDD9241C2 /* LOTPolystarAnimator.m */, + B8CD561DAB79623733B825EFFD8AB867 /* LOTRoundedRectAnimator.h */, + A00BD4D96D63206A9FF52D818D75C35F /* LOTRoundedRectAnimator.m */, + ); + name = AnimatorNodes; + path = AnimatorNodes; + sourceTree = ""; + }; 57B919C0074B414DCC7544BC0DB9A1C4 /* Pods-Lottie-Screenshot */ = { isa = PBXGroup; children = ( @@ -422,6 +678,24 @@ path = "Target Support Files/Pods-Lottie-Screenshot"; sourceTree = ""; }; + 6E7F29B9B94FAE1F3FA2BF52F0DC2C70 /* RenderNodes */ = { + isa = PBXGroup; + children = ( + E7624537FD77AC7F6D0495072DFC97C4 /* LOTFillRenderer.h */, + 692C67112880A34E0C5C4FC687910309 /* LOTFillRenderer.m */, + 76A7C125C66093A9493256A06EDF3579 /* LOTGradientFillRender.h */, + 9DF405402E29A37ABD3295AA01C36673 /* LOTGradientFillRender.m */, + 3066BDA57C77299EFE06CE33C104575D /* LOTRenderGroup.h */, + 718C64F0A16EB196B9BB2BCED007ED97 /* LOTRenderGroup.m */, + 01DCDEBBA33B8BCA26A88DF2D44FC34E /* LOTRepeaterRenderer.h */, + B301189F19192208C4BC02319D6237A9 /* LOTRepeaterRenderer.m */, + 2BA183D2B8564B7D4657BA11AF96A848 /* LOTStrokeRenderer.h */, + 50EB4083DFE620DDF4906E091C6D1751 /* LOTStrokeRenderer.m */, + ); + name = RenderNodes; + path = RenderNodes; + sourceTree = ""; + }; 74E493DDE84AD96F225E8CFE807FB45A /* Pods */ = { isa = PBXGroup; children = ( @@ -441,6 +715,47 @@ path = "../Target Support Files/FBSnapshotTestCase"; sourceTree = ""; }; + 79601C09C034B318B09A158303BC889C /* AnimatableLayers */ = { + isa = PBXGroup; + children = ( + 20787EC1D9D0B93D794128F15C003E3B /* LOTAnimatableLayer.h */, + 11876A475FC433FD39634C4005E66173 /* LOTAnimatableLayer.m */, + 770DC890826F8F8EE74B21BDEE2F6088 /* LOTCompositionContainer.h */, + AC6020C5A9EA4AE89961A435FB8D82B5 /* LOTCompositionContainer.m */, + F3D1DCAF1845418A4B1EBF2B7DE82FA4 /* LOTCompositionLayer.h */, + 0B3E6AB2508901C6E5AE75A7AD064025 /* LOTCompositionLayer.m */, + 616F96C4045CDCBFCC29E363E093FED0 /* LOTEllipseShapeLayer.h */, + E95C4F262758942F1A9CF9A49B222151 /* LOTEllipseShapeLayer.m */, + 40490CD1664D47D48DE93DC67829E295 /* LOTGroupLayerView.h */, + 283E9C97DA0BDBB7DD63DE77107939CE /* LOTGroupLayerView.m */, + CE1627A3686A013A4978B277820D892B /* LOTLayerContainer.h */, + DF7A49AF4103597E6CFF05A31C25A3F1 /* LOTLayerContainer.m */, + E93B1D40A93436398AF303D940D384CB /* LOTLayerView.h */, + 191BB6CED6399F9D21431195328D54E5 /* LOTLayerView.m */, + B058FEF8C4B8A14CF2BE9CF726BA996A /* LOTMaskContainer.h */, + 6879DC7695DB6CB06C1400EF1149D077 /* LOTMaskContainer.m */, + 26083751B6DBC952D1529284554A760E /* LOTMaskLayer.h */, + 03DBA567ECEE4F50A6F1709B2050AF22 /* LOTMaskLayer.m */, + 2105AB12C448C336745A749D8335BC1A /* LOTRectShapeLayer.h */, + F9345055688D3B51AC515BD365576D29 /* LOTRectShapeLayer.m */, + 77A6992AFCB744A50C13351D59C90C39 /* LOTShapeLayerView.h */, + 9D43B83A803CB2420FBECBF43368494D /* LOTShapeLayerView.m */, + AE23D9E2E13A5750DB309E67432ECB50 /* LOTStrokeShapeLayer.h */, + B42C26D498EB84442579B747AD8DA9A8 /* LOTStrokeShapeLayer.m */, + ); + name = AnimatableLayers; + path = AnimatableLayers; + sourceTree = ""; + }; + 7A349379A2FFF2DFBC1E1F9A4E092DA0 /* lottie-ios */ = { + isa = PBXGroup; + children = ( + 38A2BAF9B32CD4FC0CAD7D1DB55FFF9B /* Classes */, + ); + name = "lottie-ios"; + path = "lottie-ios"; + sourceTree = ""; + }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( @@ -453,22 +768,6 @@ ); sourceTree = ""; }; - 7F53B698E6B668814303FA26BBE91140 /* Classes */ = { - isa = PBXGroup; - children = ( - A755B52416B2608A7A1004C260CA5C8F /* AnimatableLayers */, - 21828EA87374AE11CE01F069C9D4840F /* AnimatableProperties */, - C0899A81DD2F6215D860DB2862F04A38 /* AnimationCache */, - C3EA18C74143ED5F3705953B007C282E /* Extensions */, - 07E2ED49ABBB3C7E295856ACEFB91B50 /* MacCompatability */, - FFC3FECD9616A25C70441807D55BDDF0 /* Models */, - 38DB89C3AF09DFFB4508ECB274C3D42A /* Private */, - A34E2EA63C584E33A377C47963E8C692 /* PublicHeaders */, - ); - name = Classes; - path = Classes; - sourceTree = ""; - }; 8A90EDBE720812738012CCCCAD456075 /* Support Files */ = { isa = PBXGroup; children = ( @@ -491,51 +790,13 @@ 99923F5D4DBD9DDCEC3804B1BB730208 /* lottie-ios */ = { isa = PBXGroup; children = ( - ED7F556B32EB02A655327A38065BB42E /* lottie-ios */, + 7A349379A2FFF2DFBC1E1F9A4E092DA0 /* lottie-ios */, 8A90EDBE720812738012CCCCAD456075 /* Support Files */, ); name = "lottie-ios"; path = ../..; sourceTree = ""; }; - A34E2EA63C584E33A377C47963E8C692 /* PublicHeaders */ = { - isa = PBXGroup; - children = ( - 0D438951D367D7E6B9A52EB39CABFD3C /* LOTAnimationTransitionController.h */, - 733BF5458787592E4207097782000CD6 /* LOTAnimationView.h */, - 99D25FB6CA08D8F054E3322A99CEC718 /* LOTAnimationView_Compat.h */, - 2CB64626B8FF205280AB53044A579DF5 /* Lottie.h */, - ); - name = PublicHeaders; - path = PublicHeaders; - sourceTree = ""; - }; - A755B52416B2608A7A1004C260CA5C8F /* AnimatableLayers */ = { - isa = PBXGroup; - children = ( - 3ECEA9F0B536624CB4C107A7C4A6A537 /* LOTAnimatableLayer.h */, - 4A4F7D12A242A57D3EF14D1F6616ED9A /* LOTAnimatableLayer.m */, - B811B6FBCAE84F38CC9C21BD00CFD108 /* LOTCompositionLayer.h */, - 64C02EFE2DB9F6A1E2AA3F4E2EB4CFC4 /* LOTCompositionLayer.m */, - 98B41C434E789596D3AC8800DD2CD307 /* LOTEllipseShapeLayer.h */, - EADB4AC5A4CCC033F65AA351B6F35992 /* LOTEllipseShapeLayer.m */, - C4774FA11E80AF5891AEFB3C74BA06F1 /* LOTGroupLayerView.h */, - 3B78C012C08124056B21345F1023272B /* LOTGroupLayerView.m */, - 038940E0144433F656A85787AEFC4789 /* LOTLayerView.h */, - 6BED7D9C1303A6F7CEEA162DB076B8C3 /* LOTLayerView.m */, - F7FC6FBB374316208B19451FE5AFF8AE /* LOTMaskLayer.h */, - E82C6E21269B90CA058C07E04660D53C /* LOTMaskLayer.m */, - D1604BD778526A0036FC6B8B35E44307 /* LOTRectShapeLayer.h */, - 80C463F28C5C272770C4B5D1801F4BF6 /* LOTRectShapeLayer.m */, - C1B8F29A34D48D33230CDDB8E7D9BE52 /* LOTShapeLayerView.h */, - E423746CD8AC8E3A0848266FE6443731 /* LOTShapeLayerView.m */, - BE2BCC7714B0D364A21645462B39FF66 /* LOTStrokeShapeLayer.h */, - CCCF8665CEAF126BB717C90B0C56BD9E /* LOTStrokeShapeLayer.m */, - ); - name = AnimatableLayers; - path = AnimatableLayers; - sourceTree = ""; - }; B1F8FE61E363311CD83F5DFAF2B2CA43 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -545,16 +806,6 @@ name = "Targets Support Files"; sourceTree = ""; }; - C0899A81DD2F6215D860DB2862F04A38 /* AnimationCache */ = { - isa = PBXGroup; - children = ( - 38965692E939501A5CDEE82E3AD594FF /* LOTAnimationCache.h */, - DBEABECC60EE1973EAB4E59395BB25CD /* LOTAnimationCache.m */, - ); - name = AnimationCache; - path = AnimationCache; - sourceTree = ""; - }; C317C498D5DF9352F73784EC781DCD15 /* Core */ = { isa = PBXGroup; children = ( @@ -576,28 +827,45 @@ name = Core; sourceTree = ""; }; - C3EA18C74143ED5F3705953B007C282E /* Extensions */ = { + D1E2A2BD258A867C7FF5DF97318F0DD1 /* AnimationCache */ = { isa = PBXGroup; children = ( - EC4019E5FCDE1AD8742EA4B1ACA5437B /* CAAnimationGroup+LOTAnimatableGroup.h */, - 5BB7B3ACC2D2613EC78FA39E589DF12D /* CAAnimationGroup+LOTAnimatableGroup.m */, - 07B596C7B22D9AF68985A746C4924BB6 /* CGGeometry+LOTAdditions.h */, - E26948A465DA7F9182A844227BB76FDF /* CGGeometry+LOTAdditions.m */, - 41A00D8C0ACF36904BF73A8E34DC2303 /* LOTHelpers.h */, - EA73364B20DF118492F5374D5C5F015A /* UIColor+Expanded.h */, - BE892D413DC54440D27EA7561E050CFD /* UIColor+Expanded.m */, + DCB1D1F4DAF388301005B02025CB955E /* LOTAnimationCache.h */, + 9A306D3E602FBA9C425FC3D59A2CDC65 /* LOTAnimationCache.m */, ); - name = Extensions; - path = Extensions; + name = AnimationCache; + path = AnimationCache; sourceTree = ""; }; - ED7F556B32EB02A655327A38065BB42E /* lottie-ios */ = { + E665EEA4606FCA6DA276E5502C050542 /* MacCompatability */ = { isa = PBXGroup; children = ( - 7F53B698E6B668814303FA26BBE91140 /* Classes */, + 80582887676814044F9A30B51C310473 /* CADisplayLink.h */, + A4C393C3E74201F262D4E1F8F487DD77 /* CADisplayLink.m */, + EC8E985C63BBE42D73D8FA33238D3892 /* CALayer+Compat.h */, + 12F515135A3E5D6F609BAF68FAAD88A4 /* CALayer+Compat.m */, + 9AD7FC0C844D9C07EC44F09838BD33A9 /* LOTPlatformCompat.h */, + A8027C5611F7F60898E2FB34ABCB0E37 /* NSValue+Compat.h */, + A86636260338CFC196380F9F44AE0CE7 /* NSValue+Compat.m */, + 46D762DC938AEDA894BF2CF888135DE0 /* UIBezierPath.h */, + E075B7FB6CD691F0384F6B943CB939F4 /* UIBezierPath.m */, + 133FA197B186848A9B63FCDA4252F08C /* UIColor.h */, + 03CD1E61FD94A6D06EBD7045DE724D0E /* UIColor.m */, ); - name = "lottie-ios"; - path = "lottie-ios"; + name = MacCompatability; + path = MacCompatability; + sourceTree = ""; + }; + E6B461E474E834CC617D31B37BF73063 /* PublicHeaders */ = { + isa = PBXGroup; + children = ( + 8AD678A89158F9449758C278080F5ADD /* LOTAnimationTransitionController.h */, + 9B4535EA16C6763DF87B7540E9E4F147 /* LOTAnimationView.h */, + 9596EA5FD08A810B013CEFFD20C3B969 /* LOTAnimationView_Compat.h */, + EDED9A97B1CD85DB78400C49203FDAEC /* Lottie.h */, + ); + name = PublicHeaders; + path = PublicHeaders; sourceTree = ""; }; F76C5E10C253876355FB231229C42226 /* iOS */ = { @@ -611,46 +879,94 @@ name = iOS; sourceTree = ""; }; - FFC3FECD9616A25C70441807D55BDDF0 /* Models */ = { - isa = PBXGroup; - children = ( - F0F4075D6B024EAA593008C4C52FC62A /* LOTAsset.h */, - 8E445C646535DB2D63FFACBB4B72D0F1 /* LOTAsset.m */, - 4958BAC558BF6C3951301AE1CF47F152 /* LOTAssetGroup.h */, - 915154231B2D379CD6ADA48ACB7965D0 /* LOTAssetGroup.m */, - ECEEC0C38F0CB593A261A272853A5867 /* LOTComposition.h */, - ADA0079C71443D88AC4CD411792901CE /* LOTComposition.m */, - 3C9DB2BA605971226D43AEEC7C1B50CB /* LOTLayer.h */, - B20FA362BC7CC34116836CA9BD8FF6AF /* LOTLayer.m */, - ED1DD07E19C76E929D5FFBE8B540B6C9 /* LOTLayerGroup.h */, - 5F7387090D868251A127AAB6C4280807 /* LOTLayerGroup.m */, - BCE092CF70280A949717C5ABFD0ACB22 /* LOTMask.h */, - 5499A1C23271BB1DE3830424EB0B001A /* LOTMask.m */, - 7D02D0DA5D34B73A3E203C4F57A3F646 /* LOTModels.h */, - 89DB172AC401BC60B44B7BF2C69C84D2 /* LOTShapeCircle.h */, - 07318C2E4A31ADF8D8C9429B28E7284A /* LOTShapeCircle.m */, - 140293088C8EF757C1EFAA25F8037D9B /* LOTShapeFill.h */, - 02DDDEE2317A547C688693827D4F76EB /* LOTShapeFill.m */, - 6DD3F8CA54098F443CC46D9A41F78270 /* LOTShapeGroup.h */, - E4CDC2607337D2B22E81EA58572A8ADA /* LOTShapeGroup.m */, - 907AE9EFB80E5F2036335EAC3A582763 /* LOTShapePath.h */, - 8306854ED41D9256D98722F30C695233 /* LOTShapePath.m */, - 68DD6E42927FC2D506EF0306BC209102 /* LOTShapeRectangle.h */, - 61866EE2B860BE232DBF27E31260CD9B /* LOTShapeRectangle.m */, - A16AFBD73CF204B5EDFFFFA8C591F3B1 /* LOTShapeStroke.h */, - 05176770DB87B145505D05D41E3452DF /* LOTShapeStroke.m */, - 9BD08E2A92D3B81640EA040F25376E22 /* LOTShapeTransform.h */, - B6BB4F4206F03C1E9E3D2DA3C2E8E246 /* LOTShapeTransform.m */, - C816DF3AB339341FEAD7215FA5021AC8 /* LOTShapeTrimPath.h */, - 4C49C86E467436D4F902AFC5C71D3BB4 /* LOTShapeTrimPath.m */, - ); - name = Models; - path = Models; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 12E2B745BC3145DDD4A97F39717C0D85 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 00E9F66FE10E21FCC1B97A2EDA583FB2 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, + 656E1E78EED2A36C22C551338CA43BB0 /* CADisplayLink.h in Headers */, + 92235AF1854DEBD5B24CA65096733BE7 /* CALayer+Compat.h in Headers */, + 4910254530274E0C5840150DDD27D693 /* CGGeometry+LOTAdditions.h in Headers */, + AC168533BEA8CC624C1F39998A9DD7BA /* LOTAnimatableBoundsValue.h in Headers */, + E79D24EBA29232D562B033490109D8BC /* LOTAnimatableColorValue.h in Headers */, + F34948B6E71918CA54ABE1BDCA2CD81E /* LOTAnimatableLayer.h in Headers */, + 1F227C7F52A495ED8A47497CF90BF6DE /* LOTAnimatableNumberValue.h in Headers */, + 5FC42C0B31EE3F3E632BA3B7B0F35028 /* LOTAnimatablePointValue.h in Headers */, + 5DE4EF29672FCEECBF57947EDE0C0629 /* LOTAnimatableScaleValue.h in Headers */, + 621F25541F1FC75C232F5C7D654868C3 /* LOTAnimatableShapeValue.h in Headers */, + 299F8B4C2FE51DD869EC860A81C5C55C /* LOTAnimatableValue.h in Headers */, + C36603E369F52DB26AB28F62F27469F2 /* LOTAnimationCache.h in Headers */, + CC326C0B76796711125441B287E93FC3 /* LOTAnimationTransitionController.h in Headers */, + 7A078901E9A7EC881CEE453EDC43025D /* LOTAnimationView.h in Headers */, + 0E62A6C089292F99E0BCCAF782EB1603 /* LOTAnimationView_Compat.h in Headers */, + 913448A0F276D3B1FAA32C8B969C1977 /* LOTAnimationView_Internal.h in Headers */, + AB4DA6EE22C52117C52BDA5561A98620 /* LOTAnimatorNode.h in Headers */, + 4388FE672CE8F93A24271A880423C1E0 /* LOTArrayInterpolator.h in Headers */, + F2E95DB9A06BAA1CEF284E16892F8CDE /* LOTAsset.h in Headers */, + D0838F7AC109217E66EAC9A3BF763B41 /* LOTAssetGroup.h in Headers */, + 9A8CAF41B7C41F43CFA6BE2BF7CD6212 /* LOTBezierData.h in Headers */, + 1EB040A0D2EDE50A0C4F6B59BEA41E74 /* LOTBezierPath.h in Headers */, + 94F197C28928E552BE3A61739768B156 /* LOTCircleAnimator.h in Headers */, + 1EABFC691B8EC4D9334C6D071EED0467 /* LOTColorInterpolator.h in Headers */, + EE4F2BE88C20FA6B80AA7A4029D56D74 /* LOTComposition.h in Headers */, + 5AFDBC4CFFDD1E91B66101D58A6381C1 /* LOTCompositionContainer.h in Headers */, + 4A0392247A949063027AB67915476CBA /* LOTCompositionLayer.h in Headers */, + AE2D1D55B53461CCC191F27DDC659320 /* LOTEllipseShapeLayer.h in Headers */, + 87718B87BDEB326B821D8E4ECACB0DD8 /* LOTFillRenderer.h in Headers */, + 4555EDFF3F60AC394D0AD8378E8142F1 /* LOTGradientFillRender.h in Headers */, + 93A455FD02D65E477B7B5246D57CBEAB /* LOTGroupLayerView.h in Headers */, + 0A35A773E258F2B6163A3FC6953435C0 /* LOTHelpers.h in Headers */, + C514D285ACE7728EB8591F2C65CF8C1B /* LOTKeyframe.h in Headers */, + 384E2AF9349D6DA4CF0886406C5F0C87 /* LOTLayer.h in Headers */, + 09F074DBF07AD43DD7EBCC013530282B /* LOTLayerContainer.h in Headers */, + 1ABE62F739C589A875896E23294C73EB /* LOTLayerGroup.h in Headers */, + 22E48EAFE0192978D54DE3F25FB890AB /* LOTLayerView.h in Headers */, + 77FC5ED0A9080A0A9D2B055A747076E8 /* LOTMask.h in Headers */, + 31AA00FD1D8A0ED3E1C162C0950B1C2A /* LOTMaskContainer.h in Headers */, + 4FE4B3E12D9F76E98BB654DCADF577A4 /* LOTMaskLayer.h in Headers */, + 6D61DBAB5D5EC30FC64F946054455761 /* LOTModels.h in Headers */, + 21BFF1A87F7C5B01F080682646F9BB3E /* LOTNumberInterpolator.h in Headers */, + 2BC90543A67615568B8B8878DCE58381 /* LOTPathAnimator.h in Headers */, + 164751C09F5DACD699894C0E8FE33A53 /* LOTPathInterpolator.h in Headers */, + 049FBC85DF5B545A6874315BE0363540 /* LOTPlatformCompat.h in Headers */, + AECC1757619215541B39DB7ECE19FE37 /* LOTPointInterpolator.h in Headers */, + FC99E3BA70A91F36552898A65A7733B9 /* LOTPolygonAnimator.h in Headers */, + ADCDCA8C7624DC3146FB0A762FBC8644 /* LOTPolystarAnimator.h in Headers */, + CBDB19E5CFC0C1A2E198AD949FAFBC4A /* LOTRectInterpolator.h in Headers */, + 5355B269620DE6BEB27929C3F8121596 /* LOTRectShapeLayer.h in Headers */, + 29D0227571CF334AD281CAB54BAF61D2 /* LOTRenderGroup.h in Headers */, + E140A124860AE8FD11A51E93482260D2 /* LOTRenderNode.h in Headers */, + 45C06ED5A531AB7D2E645789AAB3A679 /* LOTRepeaterRenderer.h in Headers */, + 89334FC1DA4C77CAC8909D87EF128684 /* LOTRoundedRectAnimator.h in Headers */, + B3AE04CCD02FADAC11D9D040AA2024CB /* LOTShapeCircle.h in Headers */, + 20C182035FA199E451D1D806C9117D2B /* LOTShapeFill.h in Headers */, + CE74B73F25F2C1F92F54D7954D3BF7E2 /* LOTShapeGradientFill.h in Headers */, + 891E40BAEB8B14C4A384E08E935C590B /* LOTShapeGroup.h in Headers */, + 7988932CB4F86771983BFAB7D68A7227 /* LOTShapeLayerView.h in Headers */, + FA825542BE668717E8251450A6DF226E /* LOTShapePath.h in Headers */, + 60C3C702C40753B60BFC354814085E90 /* LOTShapeRectangle.h in Headers */, + FF8A28FED151586005C0699D9D214CF5 /* LOTShapeRepeater.h in Headers */, + F46E5820673288FB0301C513825F8819 /* LOTShapeStar.h in Headers */, + 31E99DE7F688C8FDC547A7A109BE757D /* LOTShapeStroke.h in Headers */, + 1B185D4A697174B6CB74F1610A20CAA3 /* LOTShapeTransform.h in Headers */, + E10F1EC11E49713E3BF5D76D60A1C169 /* LOTShapeTrimPath.h in Headers */, + AA8C91CF4704EFB10F73867DECA0D871 /* LOTSizeInterpolator.h in Headers */, + B6C4BD1D7A08D8AAF082D1D59B020030 /* LOTStrokeRenderer.h in Headers */, + 808DF9C134E54AD97E9FCE06CB5E5375 /* LOTStrokeShapeLayer.h in Headers */, + 9BB5B721B81652F5DC2232AE5B9638E7 /* Lottie.h in Headers */, + D87FB440CDD267683664F35CDA3E2F14 /* LOTTransformInterpolator.h in Headers */, + F1B505D7FDEF1F439C1680E27D3ABEC3 /* LOTTrimPathNode.h in Headers */, + 67F886D0AC1E9A2F659AB44EC9DA4E14 /* LOTValueInterpolator.h in Headers */, + 50EA3B9F2E9128194B1E92291E2CDC59 /* NSValue+Compat.h in Headers */, + 5605CB0EF32FECCE4F3E3FAFF25407B3 /* UIBezierPath.h in Headers */, + 3B423A044949204436D1DBDC159444F7 /* UIColor+Expanded.h in Headers */, + EA15B50C80AD3232A0F1F0CB4D73CD05 /* UIColor.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; DF2D3D0B85F27C47538BC56ED1599E0D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -665,80 +981,9 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FA8FB5225B08C0DCC3D77A3D8F129B9F /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BAB4E2BEB14BF995128697B341DC5503 /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, - 305A4FC079A09ECC076C8FC0ED888736 /* CADisplayLink.h in Headers */, - 70438051F06B159F8E143D62A3A89CF0 /* CALayer+Compat.h in Headers */, - 1D299A13E6DAE2FBC9DF132E49F5FEE1 /* CGGeometry+LOTAdditions.h in Headers */, - 5C7070E2CFF1068319B3649CB50AA814 /* LOTAnimatableBoundsValue.h in Headers */, - 1A288818B22434F67FCF6CAF87B69DB8 /* LOTAnimatableColorValue.h in Headers */, - 1C8FCC1D19D95BC30FE3F6C8A3F29CB9 /* LOTAnimatableLayer.h in Headers */, - 4466C1B3F3FC86FAF4C7C02EACF67804 /* LOTAnimatableNumberValue.h in Headers */, - D46C6252DF6894C74ED406EEC2F7AA37 /* LOTAnimatablePointValue.h in Headers */, - B17FBA00CA088A275C9F4F7BC01BDAFB /* LOTAnimatableScaleValue.h in Headers */, - 80D5637B3071EB743975C4342E33A03B /* LOTAnimatableShapeValue.h in Headers */, - 58E3B0DC56512E546C886B867CE32E0C /* LOTAnimatableValue.h in Headers */, - 974152DB404C2F88514A64E4569C6927 /* LOTAnimationCache.h in Headers */, - F393DF31D66DBDE91439C1F1C313B839 /* LOTAnimationTransitionController.h in Headers */, - 8A1D16BE93881C36FFDD65537AC0DFFA /* LOTAnimationView.h in Headers */, - 6DCDC5FCE0BC9059DB1E5272D785225F /* LOTAnimationView_Compat.h in Headers */, - F2BD1CC6370CD2CA8DA8EFA97BC197BC /* LOTAnimationView_Internal.h in Headers */, - D53476AF1039009185E5442560BC6B84 /* LOTAsset.h in Headers */, - 724B26087D0DBE606982A4F242CE54B8 /* LOTAssetGroup.h in Headers */, - 6A35555B9AE6F789FE47773CF54E0E5D /* LOTComposition.h in Headers */, - CDEB4A230EF1C29D586F636E7930608F /* LOTCompositionLayer.h in Headers */, - 965784FB50F5BB7606E5FB708E84E62C /* LOTEllipseShapeLayer.h in Headers */, - D88DCD024FD2C6E7436FF8E7A9F1E67C /* LOTGroupLayerView.h in Headers */, - F31EA277C8E6D1207C31371089E8D34C /* LOTHelpers.h in Headers */, - 2A16C057A820E388D1747481B2431FDB /* LOTLayer.h in Headers */, - 2ED3318CE04B591883206DDBC0CB773E /* LOTLayerGroup.h in Headers */, - 4B3290A15515F7D8ED634ACE200A126E /* LOTLayerView.h in Headers */, - B813FCC6707ED781FF64F93A6EF6CEDD /* LOTMask.h in Headers */, - D2AECA1DB93F7AEEFEF6D57D5B930E1E /* LOTMaskLayer.h in Headers */, - 26D2E6ABB11485F0C41DB6BDA7BDAE36 /* LOTModels.h in Headers */, - 21BE1C548791A438C8D6C90F0AF80326 /* LOTPlatformCompat.h in Headers */, - 40C441ECE0AF19B750FD1D732F3E92BB /* LOTRectShapeLayer.h in Headers */, - E01A3F880F393188851897284E616F88 /* LOTShapeCircle.h in Headers */, - 7B9780D72C08BDF08FB3AA14AA598A9A /* LOTShapeFill.h in Headers */, - 05232FF14413AEC4305804FBCF2476CD /* LOTShapeGroup.h in Headers */, - CBD6B5424896E3AB02205D3EBCDE8589 /* LOTShapeLayerView.h in Headers */, - F349C06671F2C15846976A3C114649D9 /* LOTShapePath.h in Headers */, - C5617D495A50C757EE0F917223243854 /* LOTShapeRectangle.h in Headers */, - 0ED2ADBCE28E6B97D549934625B1B040 /* LOTShapeStroke.h in Headers */, - 9151C0E6802A8E79DD383EC22E2F7C31 /* LOTShapeTransform.h in Headers */, - DEE21E35007904F5E4882EE19A8439E7 /* LOTShapeTrimPath.h in Headers */, - 004E610849A35AE7DE7A9A086E8782E6 /* LOTStrokeShapeLayer.h in Headers */, - 51A474309F26DF0E2B50A1005DB6AD6F /* Lottie.h in Headers */, - BC489FFBAA3479CF29C42AEC35C75B53 /* NSValue+Compat.h in Headers */, - F0B633447C4935FFAF78FA1B3A3FC8F1 /* UIBezierPath.h in Headers */, - 1E1D1EF438D496FC3563AB7B2237682B /* UIColor+Expanded.h in Headers */, - 6530F8342E1B365D2067018819EE5634 /* UIColor.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 017653E2E48B0CC14E4BB5342FB2EE43 /* lottie-ios */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3C126D931246CCCA229D241130F71C59 /* Build configuration list for PBXNativeTarget "lottie-ios" */; - buildPhases = ( - ED41494652DAB3D2BBB2D5F69B48004A /* Sources */, - 99BA8D0941DB45290AB12DAE9DFE5F5E /* Frameworks */, - FA8FB5225B08C0DCC3D77A3D8F129B9F /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "lottie-ios"; - productName = "lottie-ios"; - productReference = 66A25C1B11D426C3DB98F5132098E20F /* liblottie-ios.a */; - productType = "com.apple.product-type.library.static"; - }; 04A9C975C5D97BA01C2CBF0F860CFC39 /* FBSnapshotTestCase */ = { isa = PBXNativeTarget; buildConfigurationList = 00C014BDE0544770866F9904FE165F2A /* Build configuration list for PBXNativeTarget "FBSnapshotTestCase" */; @@ -790,6 +1035,23 @@ productReference = 0A210C72E6F26E72961614F90732A7D2 /* libPods-Lottie-ScreenshotTests.a */; productType = "com.apple.product-type.library.static"; }; + E1F93C552124602CE4A9D9A5D61B2C5A /* lottie-ios */ = { + isa = PBXNativeTarget; + buildConfigurationList = CEA07F396511F95F0A7808E6E1BB84E2 /* Build configuration list for PBXNativeTarget "lottie-ios" */; + buildPhases = ( + D834573CF3DB5DC0466622B740D1114D /* Sources */, + A805EE485786AAF7F08E2684E5352955 /* Frameworks */, + 12E2B745BC3145DDD4A97F39717C0D85 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "lottie-ios"; + productName = "lottie-ios"; + productReference = 66A25C1B11D426C3DB98F5132098E20F /* liblottie-ios.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -812,7 +1074,7 @@ projectRoot = ""; targets = ( 04A9C975C5D97BA01C2CBF0F860CFC39 /* FBSnapshotTestCase */, - 017653E2E48B0CC14E4BB5342FB2EE43 /* lottie-ios */, + E1F93C552124602CE4A9D9A5D61B2C5A /* lottie-ios */, 768CCB02D05E95A4A4EFFB398E73DA97 /* Pods-Lottie-Screenshot */, 9D3D886CDF185EACF35FA4D61A19941B /* Pods-Lottie-ScreenshotTests */, ); @@ -843,59 +1105,90 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DF5E566C19FBE31B439EAF61571B29A4 /* Sources */ = { + D834573CF3DB5DC0466622B740D1114D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F9D51412103AD03A7C710DA6E8733558 /* Pods-Lottie-Screenshot-dummy.m in Sources */, + 3BF3B3556B31AAC221B22EE4BC2CAEBE /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, + B22C8CF496EAE91943BECAE843393B39 /* CADisplayLink.m in Sources */, + BCAA6CA019DCBAF48D71CEC31138B22E /* CALayer+Compat.m in Sources */, + 9A69D75147FAD6C01ABCF82D7CD8D778 /* CGGeometry+LOTAdditions.m in Sources */, + 913A04757397B526CCE9CC479BBAE5AA /* LOTAnimatableBoundsValue.m in Sources */, + 4EA163180400126D8FD241ED05C7227A /* LOTAnimatableColorValue.m in Sources */, + 91A6D0266BEA10BAD3F68B2EAF9B31E4 /* LOTAnimatableLayer.m in Sources */, + A74C1C20974108DE4B2982EE12DA6175 /* LOTAnimatableNumberValue.m in Sources */, + 4AB625D15670D83859905930ABDC32FA /* LOTAnimatablePointValue.m in Sources */, + E410581C278591038359BDC32C919B1B /* LOTAnimatableScaleValue.m in Sources */, + 2AA3DD6FF0355149FAA3AC43C781D2F6 /* LOTAnimatableShapeValue.m in Sources */, + 3F2D0A1C9E917D10EE5D5D78E43E3DC1 /* LOTAnimationCache.m in Sources */, + 39382D9850E94B41031571BC9301566A /* LOTAnimationTransitionController.m in Sources */, + F22D32A68EDBD5273E49C469153E4AD9 /* LOTAnimationView.m in Sources */, + 4B2BF9711D5E4216B060F2E5BF358C84 /* LOTAnimatorNode.m in Sources */, + EF273ED306EE9DDC199F7F288590286D /* LOTArrayInterpolator.m in Sources */, + FD52B34CFEF88A220E1632AC94466BC5 /* LOTAsset.m in Sources */, + 5CBEA58EC8541A3575DB567EBC38B735 /* LOTAssetGroup.m in Sources */, + 84A31AEA929BB36940DDDDF445B4263A /* LOTBezierData.m in Sources */, + FACAA35021A25C93BF8211EE1AD53452 /* LOTBezierPath.m in Sources */, + 82053E79D57EC0CFEE8E8EE02F231313 /* LOTCircleAnimator.m in Sources */, + 59CD87778BBFFC16EE4371B2C35CD058 /* LOTColorInterpolator.m in Sources */, + EB4A608850120A60601CC73843FAC1C0 /* LOTComposition.m in Sources */, + AD1D46C49D8B512C2EF51C3D12DE8060 /* LOTCompositionContainer.m in Sources */, + 9029B24B7FE5DD1BA2F29176CCED5F59 /* LOTCompositionLayer.m in Sources */, + 562EF27AACC98CDD5946036EE5F38732 /* LOTEllipseShapeLayer.m in Sources */, + 883B15D4C17A50E2E4BE9291B9264987 /* LOTFillRenderer.m in Sources */, + 47B1AE2DD1B916BA39367611C4C1248C /* LOTGradientFillRender.m in Sources */, + C14A532F907E7C7F3BA2AA5F78758159 /* LOTGroupLayerView.m in Sources */, + 22A9E8873A8F0AB982117511A8FEB9E8 /* LOTKeyframe.m in Sources */, + 9B1C20CB5D44BA93D0BD8768D8215D38 /* LOTLayer.m in Sources */, + F375C2875AD350705E9D7A6E0FEAF1DC /* LOTLayerContainer.m in Sources */, + 5A9D5AF1F51D9A5A1D99CDD83F32BC4C /* LOTLayerGroup.m in Sources */, + 448493A40300631B792363FDD32C5914 /* LOTLayerView.m in Sources */, + 0AEE2F84A476FC2F77D5B4907E63E16C /* LOTMask.m in Sources */, + 55899D53F6806B83E17FF9C102F4D277 /* LOTMaskContainer.m in Sources */, + D5A9CFC3AFB164E25E988A108E96C122 /* LOTMaskLayer.m in Sources */, + 2CCFEF3FA00FE7425B862A0CD59D906F /* LOTNumberInterpolator.m in Sources */, + FFCAC920D0C3FBD4329F9A6AF7006746 /* LOTPathAnimator.m in Sources */, + 9C7F593BA0CC5275829F382AE1AB183B /* LOTPathInterpolator.m in Sources */, + 503CFC8335EC236054600AF803E1417B /* LOTPointInterpolator.m in Sources */, + 0526AEF46164BCF9D26C6CBF9DBFBDA6 /* LOTPolygonAnimator.m in Sources */, + 25292BC36C7A8EE2308D0BAE6D138D3D /* LOTPolystarAnimator.m in Sources */, + 4C0716DDBEAE2CAF5B525FB6A3239AE9 /* LOTRectInterpolator.m in Sources */, + B36C21D67A26525FBF98BF07AA3E2C5E /* LOTRectShapeLayer.m in Sources */, + 7024E8A9CAA9ECCC2FE5871C91DC8035 /* LOTRenderGroup.m in Sources */, + E636154333D2203617AD32BA0970312B /* LOTRenderNode.m in Sources */, + 63BCB84D02A54EFDB2ED86EE81DD5D46 /* LOTRepeaterRenderer.m in Sources */, + D410F8E5A57BC127C986FA4418A14F7C /* LOTRoundedRectAnimator.m in Sources */, + 7363EE0A3354C53C7DF29A1B70DED842 /* LOTShapeCircle.m in Sources */, + 83AD200FEF5E5592A7827A9578CFE2B2 /* LOTShapeFill.m in Sources */, + 596D7D0F6FEBD324DDF5932940826405 /* LOTShapeGradientFill.m in Sources */, + D20E9693142E6F971B72D751CD7E1BF5 /* LOTShapeGroup.m in Sources */, + A1D76422C847E16A0F3323617E161DEC /* LOTShapeLayerView.m in Sources */, + 6163074ACE701F7F55A813BC1BE9981F /* LOTShapePath.m in Sources */, + DF99DD2768A9A51C7443E1FA98FCD18E /* LOTShapeRectangle.m in Sources */, + 58FD952983A66BAFA31CFC320981FF60 /* LOTShapeRepeater.m in Sources */, + 7776D93B72C92E94E41D0307E011B49A /* LOTShapeStar.m in Sources */, + B609734AF3458369BCAAFC099963B559 /* LOTShapeStroke.m in Sources */, + 1C06AD276BE5D8F028C02E71A6FF61EE /* LOTShapeTransform.m in Sources */, + B20050BDE3EDE2BADD63969E78B3BD1A /* LOTShapeTrimPath.m in Sources */, + 9138101BD10F686B48C9137FD9FEB3DF /* LOTSizeInterpolator.m in Sources */, + 138DED758881D39839E7F2E278E59181 /* LOTStrokeRenderer.m in Sources */, + 32D6883E1F24EC5976E96532EAA6E9B6 /* LOTStrokeShapeLayer.m in Sources */, + 568C4BCF8F52796A89D31CD7C315D2CC /* lottie-ios-dummy.m in Sources */, + 350E7A199003C7B613AA91FDBF23824C /* LOTTransformInterpolator.m in Sources */, + B4F5446C659EF8100E8885ECA5373E20 /* LOTTrimPathNode.m in Sources */, + EF5E8A2A35B247081EDB22D7D51C007B /* LOTValueInterpolator.m in Sources */, + CB2AA4EFF68A48B5D4CF4B79EEA4DCD1 /* NSValue+Compat.m in Sources */, + D10687448EEB18BAC9DF41E1B242C9D7 /* UIBezierPath.m in Sources */, + F9BD70084950DACA6AD0663158C0A650 /* UIColor+Expanded.m in Sources */, + E10509AFDEF0AA6372803CCBC996CB12 /* UIColor.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - ED41494652DAB3D2BBB2D5F69B48004A /* Sources */ = { + DF5E566C19FBE31B439EAF61571B29A4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF6315305F6FB4BA113CB7C1CF3DB989 /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, - 588F4F95328B4798B75A348B5AF88444 /* CADisplayLink.m in Sources */, - 5B2C095993117B50DD74EA1263665F9C /* CALayer+Compat.m in Sources */, - B5A4141963E33CEAC4734D58DA4A61C8 /* CGGeometry+LOTAdditions.m in Sources */, - D34AF7C03E8D90AE18128D9443DFA49E /* LOTAnimatableBoundsValue.m in Sources */, - 9D8EC246A6479CED8E570183AAC149B4 /* LOTAnimatableColorValue.m in Sources */, - 83B58EAD7AF0CFB7C6336179D3248FDE /* LOTAnimatableLayer.m in Sources */, - F180876FFDE15FDD00997D4EEF4C29EF /* LOTAnimatableNumberValue.m in Sources */, - BB88C8AD1FE0EE86CB270179D733FD2D /* LOTAnimatablePointValue.m in Sources */, - 085FE0FAD4FEAD7ABB5BA5F1008639C2 /* LOTAnimatableScaleValue.m in Sources */, - 66DA519BDAC71A15D0720F2DC8C17447 /* LOTAnimatableShapeValue.m in Sources */, - B8FB6C282DF4080988EC45751AEA9EE4 /* LOTAnimationCache.m in Sources */, - 5F9651AF911CE8C728095B3EAEC91F9A /* LOTAnimationTransitionController.m in Sources */, - 1EAB281991C7149434641C09B116A88A /* LOTAnimationView.m in Sources */, - 821CC7A28889F9A7CD3BDBC47308CF89 /* LOTAsset.m in Sources */, - F15A7644B57DA972DDDDE13DB429A6F8 /* LOTAssetGroup.m in Sources */, - 77B7606AB2142A1DD619539FD56E34AC /* LOTComposition.m in Sources */, - 113BB3A838E558D498E636EA469EA811 /* LOTCompositionLayer.m in Sources */, - 40BCE0A7D1847AF1D6E307033A930BEA /* LOTEllipseShapeLayer.m in Sources */, - 144842511ABA8C2BAAA9B126CB1F1AE6 /* LOTGroupLayerView.m in Sources */, - 6DBF40DE23D672CC5E3D04A006D14E6C /* LOTLayer.m in Sources */, - 0864E26084214BD1B49E1CE263B78747 /* LOTLayerGroup.m in Sources */, - 9F02C096864E7A0E13E36B11ECD4AFBE /* LOTLayerView.m in Sources */, - DA6C40296B11C3E0DA1C9FD331466716 /* LOTMask.m in Sources */, - C09E02113BFE904B0BF00E40AA4D4307 /* LOTMaskLayer.m in Sources */, - 273380C3C5FF5A3A2745F9CEADF5E3A8 /* LOTRectShapeLayer.m in Sources */, - 3022BC32A48B9131D7500DD2C813659E /* LOTShapeCircle.m in Sources */, - 7142B71757FA9DDF32B1786573009A30 /* LOTShapeFill.m in Sources */, - 3650FB70615288AC8E1AF7935218EB91 /* LOTShapeGroup.m in Sources */, - 279328FE6763888ED2750A4903CF0134 /* LOTShapeLayerView.m in Sources */, - 307FF2F6A1653C54A8EEE0331459DE70 /* LOTShapePath.m in Sources */, - 0E27C6362C76387D2579BA2123E24C35 /* LOTShapeRectangle.m in Sources */, - 182135EFDA6B5561FC21D1B3D1883430 /* LOTShapeStroke.m in Sources */, - A473029F314F0C90561BA8EE66686143 /* LOTShapeTransform.m in Sources */, - A4849058E9A6170C9FEFCE8DCF7A7A82 /* LOTShapeTrimPath.m in Sources */, - 18787D6A762B68F3BF9FB56D211F4E53 /* LOTStrokeShapeLayer.m in Sources */, - 75A82DFCD555EB6742BD40D9DF559BB1 /* lottie-ios-dummy.m in Sources */, - EA689DF73D2B4ED24512B11DDBA39AE5 /* NSValue+Compat.m in Sources */, - D788EFAD255EFD1C0FB7855151FD8019 /* UIBezierPath.m in Sources */, - 9786CE94CB18CDFD081E9AAAADE80B7A /* UIColor+Expanded.m in Sources */, - 0D27778CADFD5426FF627572D09CEE6E /* UIColor.m in Sources */, + F9D51412103AD03A7C710DA6E8733558 /* Pods-Lottie-Screenshot-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -905,7 +1198,7 @@ 2A0F497EBDD155A3D84B549AE0C5BAD5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "lottie-ios"; - target = 017653E2E48B0CC14E4BB5342FB2EE43 /* lottie-ios */; + target = E1F93C552124602CE4A9D9A5D61B2C5A /* lottie-ios */; targetProxy = B198D39B4D8B16695BDEB4A9A8EA51E8 /* PBXContainerItemProxy */; }; EA47EE380EF9710586FB7567B494D543 /* PBXTargetDependency */ = { @@ -917,7 +1210,7 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 3A919D51D12FD6294AB04B8A1807A4B0 /* Debug */ = { + 3063396F579BEEEFB5DE71D89E5EE737 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 11E26C61A7F7781A6C9138BBEF1563FA /* lottie-ios.xcconfig */; buildSettings = { @@ -963,6 +1256,29 @@ }; name = Debug; }; + 58D51B1192CFEDBB8B2AC3F225D2A55A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 11E26C61A7F7781A6C9138BBEF1563FA /* lottie-ios.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/lottie-ios/lottie-ios-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; 673254EEAF0B5BF4596080C749645884 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1095,29 +1411,6 @@ }; name = Release; }; - B1BEAC92A1B89FFE6B043C4E434C999A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 11E26C61A7F7781A6C9138BBEF1563FA /* lottie-ios.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/lottie-ios/lottie-ios-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; C4D4E3DE71B81F26D8F2701C64F24545 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D3A198E7445EB9E2BDA4B311FBFE135E /* Pods-Lottie-Screenshot.release.xcconfig */; @@ -1206,11 +1499,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3C126D931246CCCA229D241130F71C59 /* Build configuration list for PBXNativeTarget "lottie-ios" */ = { + CEA07F396511F95F0A7808E6E1BB84E2 /* Build configuration list for PBXNativeTarget "lottie-ios" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3A919D51D12FD6294AB04B8A1807A4B0 /* Debug */, - B1BEAC92A1B89FFE6B043C4E434C999A /* Release */, + 3063396F579BEEEFB5DE71D89E5EE737 /* Debug */, + 58D51B1192CFEDBB8B2AC3F225D2A55A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest0@2x.png index 635e4f95c1..9e809254ee 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest100@2x.png index 12ca874dbe..78273dbc71 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest50@2x.png index 47d523f25a..6145054aab 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AlBoardmanTest/testAlBoardmanTest50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm100@2x.png index abf6d39770..db048572ed 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm50@2x.png index d01dad4947..62689e7883 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AlarmTest/testAlarm50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet0@2x.png index fef23715a5..56f03c11f9 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet100@2x.png index f1c0e987c8..39169ed8cf 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet30@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet30@2x.png index 68b5d16eda..2e28e0435d 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet30@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet30@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet50@2x.png index b338c583de..9ef728032a 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AllSetTest/testAllSet50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/AnchorTest/testAnchorTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/AnchorTest/testAnchorTest50@2x.png index aea901a50a..f5a77be4da 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/AnchorTest/testAnchorTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/AnchorTest/testAnchorTest50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch0@2x.png index 7ed86d6c1b..9245274296 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch100@2x.png index 310fa4acf0..3fd06f09c7 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch50@2x.png index 67fe7c9441..3a0555707b 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/CheckSwitchTest/testCheckSwitch50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity100@2x.png index 39ed026b38..9780c5fb81 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity15@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity15@2x.png index 94f0de5f6e..510170d613 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity15@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity15@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity25@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity25@2x.png index 64debdb76c..f0e28837ec 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity25@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity25@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity50@2x.png index 39ed026b38..9780c5fb81 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/CityTest/testCity50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/EmpyStateTest/testEmpyStateTest100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/EmpyStateTest/testEmpyStateTest100@2x.png index 3d63f3ff3f..802a037938 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/EmpyStateTest/testEmpyStateTest100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/EmpyStateTest/testEmpyStateTest100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/HamburgerArrowTest/testHamburgerArrowTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/HamburgerArrowTest/testHamburgerArrowTest50@2x.png index 375c04d935..8c361a5d17 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/HamburgerArrowTest/testHamburgerArrowTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/HamburgerArrowTest/testHamburgerArrowTest50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts100@2x.png index 4a5f02d89a..7ab32694bd 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts15@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts15@2x.png index 6b44425b2e..7918ecb7e6 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts15@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts15@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts25@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts25@2x.png index efb05fb3ce..c7f41370ce 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts25@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts25@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts50@2x.png index c449d363ce..6ed0409e69 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/Hosts/testHosts50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageLoadTest/testImageLoadTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageLoadTest/testImageLoadTest50@2x.png index 5c28e199a1..134b9de8d1 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageLoadTest/testImageLoadTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageLoadTest/testImageLoadTest50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest25@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest25@2x.png index ce318d800c..15ef3f7a91 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest25@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest25@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest50@2x.png index 7dc612814d..99e30b0498 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest75@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest75@2x.png index 79f4c2896c..c61374e146 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest75@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/ImageTransformTest/testImageTransformTest75@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb100@2x.png index a6ce53fda1..08e7ac622d 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb50@2x.png index d8a9a37ec8..141d8a0001 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LightBulb/testLightBulb50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest0@2x.png index f5a6e2b6a6..417ad69613 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest100@2x.png index 0825a1e581..2bfd7493cb 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest50@2x.png index c5cb885721..3c247a3718 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LoopPlayOnceTest/testLoopPlayOnceTest50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo100@2x.png index f799ff0cbb..6521ed25ad 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo15@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo15@2x.png index 45142cdf5e..bf42f14c0d 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo15@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo15@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo25@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo25@2x.png index 32a780a9a1..41b8c32c33 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo25@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo25@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo50@2x.png index dcc8ac286a..1c336b6b64 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTest/testLottieLogo50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo100@2x.png index a0a5095fb4..a2ee71837d 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo15@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo15@2x.png index ea15de49f6..d1868ad759 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo15@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo15@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo25@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo25@2x.png index 9434dc5486..fb9d5a982b 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo25@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo25@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo50@2x.png index 318793e41c..87529c29b5 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/LottieLogoTestB/testLottieLogo50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke0@2x.png index 949170a84b..4d4fc51abb 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke100@2x.png index b869d3d2f3..00e83b5d9f 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke50@2x.png index be5b4d14ed..a3f93fc4dc 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PathStrokeTest/testPathStroke50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest25@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest25@2x.png index 03f72553ea..44c40b0f6c 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest25@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest25@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest50@2x.png index 0468be3d70..069a2a0206 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PhonePreCompTest/testPhonePreCompTest50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump0@2x.png index d28df99f04..f91e3dbc20 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump100@2x.png index da6b88b5a5..9578832f08 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump50@2x.png index fb0e41bc96..9e1c6f5f2b 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/PinJump/testPinJump50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions0@2x.png index c6489cbc6d..c49cfa83a5 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions100@2x.png index 5fc0438181..5d1688fc15 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions50@2x.png index c564bc7fa1..a88f63e8df 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/SplitDimensions/testSplitDimensions50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathFill/testTrimPathFill100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathFill/testTrimPathFill100@2x.png index bc1b7d8277..32db210b24 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathFill/testTrimPathFill100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathFill/testTrimPathFill100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathsFull/testTrimPathsFull50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathsFull/testTrimPathsFull50@2x.png index 8b697ea3eb..b49a8902fe 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathsFull/testTrimPathsFull50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/TrimPathsFull/testTrimPathsFull50@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest0@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest0@2x.png index 780e6d7a8c..3210112124 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest0@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest0@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest100@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest100@2x.png index 0dc2b30792..19d286ea2e 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest100@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest100@2x.png differ diff --git a/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest50@2x.png b/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest50@2x.png index 2b244cf4d5..0a584e3394 100644 Binary files a/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest50@2x.png and b/Lottie-Screenshot/Tests/ReferenceImages_64/TwitterHeartTest/testTwitterHeartTest50@2x.png differ diff --git a/Lottie.xcodeproj/project.pbxproj b/Lottie.xcodeproj/project.pbxproj index d1b3f0ecc9..d1e7347115 100644 --- a/Lottie.xcodeproj/project.pbxproj +++ b/Lottie.xcodeproj/project.pbxproj @@ -169,6 +169,161 @@ 489F8E141E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 489F8E111E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m */; }; 489F8E151E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 489F8E111E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m */; }; 489F8EAF1E4D21A400F2DEB7 /* LOTAnimationView_Compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DBA16351B4FA408937A16CE /* LOTAnimationView_Compat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6201FAE61F200B4A00A047C9 /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6201FAE41F200B4A00A047C9 /* LOTMaskContainer.h */; }; + 6201FAE71F200B4A00A047C9 /* LOTMaskContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6201FAE41F200B4A00A047C9 /* LOTMaskContainer.h */; }; + 6201FAE81F200B4A00A047C9 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6201FAE51F200B4A00A047C9 /* LOTMaskContainer.m */; }; + 6201FAE91F200B4A00A047C9 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6201FAE51F200B4A00A047C9 /* LOTMaskContainer.m */; }; + 6201FAEA1F200B4A00A047C9 /* LOTMaskContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6201FAE51F200B4A00A047C9 /* LOTMaskContainer.m */; }; + 621A4F681F216DC60065E14F /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 621A4F661F216DC60065E14F /* LOTBezierPath.h */; }; + 621A4F691F216DC60065E14F /* LOTBezierPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 621A4F661F216DC60065E14F /* LOTBezierPath.h */; }; + 621A4F6A1F216DC60065E14F /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 621A4F671F216DC60065E14F /* LOTBezierPath.m */; }; + 621A4F6B1F216DC60065E14F /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 621A4F671F216DC60065E14F /* LOTBezierPath.m */; }; + 621A4F6C1F216DC60065E14F /* LOTBezierPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 621A4F671F216DC60065E14F /* LOTBezierPath.m */; }; + 621A4F701F2275980065E14F /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 621A4F6E1F2275980065E14F /* LOTTrimPathNode.h */; }; + 621A4F711F2275980065E14F /* LOTTrimPathNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 621A4F6E1F2275980065E14F /* LOTTrimPathNode.h */; }; + 621A4F721F2275980065E14F /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 621A4F6F1F2275980065E14F /* LOTTrimPathNode.m */; }; + 621A4F731F2275980065E14F /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 621A4F6F1F2275980065E14F /* LOTTrimPathNode.m */; }; + 621A4F741F2275980065E14F /* LOTTrimPathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 621A4F6F1F2275980065E14F /* LOTTrimPathNode.m */; }; + 622F75E91F29508D00269858 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F75E71F29508D00269858 /* LOTShapeGradientFill.h */; }; + 622F75EA1F29508D00269858 /* LOTShapeGradientFill.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F75E71F29508D00269858 /* LOTShapeGradientFill.h */; }; + 622F75EB1F29508D00269858 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F75E81F29508D00269858 /* LOTShapeGradientFill.m */; }; + 622F75EC1F29508D00269858 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F75E81F29508D00269858 /* LOTShapeGradientFill.m */; }; + 622F75ED1F29508D00269858 /* LOTShapeGradientFill.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F75E81F29508D00269858 /* LOTShapeGradientFill.m */; }; + 622F762C1F2A8CBA00269858 /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F762A1F2A8CBA00269858 /* LOTShapeStar.h */; }; + 622F762D1F2A8CBA00269858 /* LOTShapeStar.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F762A1F2A8CBA00269858 /* LOTShapeStar.h */; }; + 622F762E1F2A8CBA00269858 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F762B1F2A8CBA00269858 /* LOTShapeStar.m */; }; + 622F762F1F2A8CBA00269858 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F762B1F2A8CBA00269858 /* LOTShapeStar.m */; }; + 622F76301F2A8CBA00269858 /* LOTShapeStar.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F762B1F2A8CBA00269858 /* LOTShapeStar.m */; }; + 622F76351F2A91CA00269858 /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76331F2A91CA00269858 /* LOTPolystarAnimator.h */; }; + 622F76361F2A91CA00269858 /* LOTPolystarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76331F2A91CA00269858 /* LOTPolystarAnimator.h */; }; + 622F76371F2A91CA00269858 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76341F2A91CA00269858 /* LOTPolystarAnimator.m */; }; + 622F76381F2A91CA00269858 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76341F2A91CA00269858 /* LOTPolystarAnimator.m */; }; + 622F76391F2A91CA00269858 /* LOTPolystarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76341F2A91CA00269858 /* LOTPolystarAnimator.m */; }; + 622F763C1F2A92FC00269858 /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F763A1F2A92FC00269858 /* LOTPolygonAnimator.h */; }; + 622F763D1F2A92FC00269858 /* LOTPolygonAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F763A1F2A92FC00269858 /* LOTPolygonAnimator.h */; }; + 622F763E1F2A92FC00269858 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F763B1F2A92FC00269858 /* LOTPolygonAnimator.m */; }; + 622F763F1F2A92FC00269858 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F763B1F2A92FC00269858 /* LOTPolygonAnimator.m */; }; + 622F76401F2A92FC00269858 /* LOTPolygonAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F763B1F2A92FC00269858 /* LOTPolygonAnimator.m */; }; + 622F764E1F2AC1BF00269858 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F764C1F2AC1BF00269858 /* LOTArrayInterpolator.h */; }; + 622F764F1F2AC1BF00269858 /* LOTArrayInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F764C1F2AC1BF00269858 /* LOTArrayInterpolator.h */; }; + 622F76501F2AC1BF00269858 /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F764D1F2AC1BF00269858 /* LOTArrayInterpolator.m */; }; + 622F76511F2AC1BF00269858 /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F764D1F2AC1BF00269858 /* LOTArrayInterpolator.m */; }; + 622F76521F2AC1BF00269858 /* LOTArrayInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F764D1F2AC1BF00269858 /* LOTArrayInterpolator.m */; }; + 622F76551F2AC70400269858 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76531F2AC70400269858 /* LOTGradientFillRender.h */; }; + 622F76561F2AC70400269858 /* LOTGradientFillRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76531F2AC70400269858 /* LOTGradientFillRender.h */; }; + 622F76571F2AC70400269858 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76541F2AC70400269858 /* LOTGradientFillRender.m */; }; + 622F76581F2AC70400269858 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76541F2AC70400269858 /* LOTGradientFillRender.m */; }; + 622F76591F2AC70400269858 /* LOTGradientFillRender.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76541F2AC70400269858 /* LOTGradientFillRender.m */; }; + 622F76641F2BCA7700269858 /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76621F2BCA7700269858 /* LOTShapeRepeater.h */; }; + 622F76651F2BCA7700269858 /* LOTShapeRepeater.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76621F2BCA7700269858 /* LOTShapeRepeater.h */; }; + 622F76661F2BCA7700269858 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76631F2BCA7700269858 /* LOTShapeRepeater.m */; }; + 622F76671F2BCA7700269858 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76631F2BCA7700269858 /* LOTShapeRepeater.m */; }; + 622F76681F2BCA7700269858 /* LOTShapeRepeater.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F76631F2BCA7700269858 /* LOTShapeRepeater.m */; }; + 622F766B1F2BCE1300269858 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76691F2BCE1300269858 /* LOTRepeaterRenderer.h */; }; + 622F766C1F2BCE1300269858 /* LOTRepeaterRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 622F76691F2BCE1300269858 /* LOTRepeaterRenderer.h */; }; + 622F766D1F2BCE1300269858 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F766A1F2BCE1300269858 /* LOTRepeaterRenderer.m */; }; + 622F766E1F2BCE1300269858 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F766A1F2BCE1300269858 /* LOTRepeaterRenderer.m */; }; + 622F766F1F2BCE1300269858 /* LOTRepeaterRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 622F766A1F2BCE1300269858 /* LOTRepeaterRenderer.m */; }; + 6274CEB91F157DCD00E05049 /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CEB71F157DCD00E05049 /* LOTNumberInterpolator.h */; }; + 6274CEBA1F157DCD00E05049 /* LOTNumberInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CEB71F157DCD00E05049 /* LOTNumberInterpolator.h */; }; + 6274CEBB1F157DCD00E05049 /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CEB81F157DCD00E05049 /* LOTNumberInterpolator.m */; }; + 6274CEBC1F157DCD00E05049 /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CEB81F157DCD00E05049 /* LOTNumberInterpolator.m */; }; + 6274CEBD1F157DCD00E05049 /* LOTNumberInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CEB81F157DCD00E05049 /* LOTNumberInterpolator.m */; }; + 6274CF8B1F16F29200E05049 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CF891F16F29200E05049 /* LOTPointInterpolator.h */; }; + 6274CF8C1F16F29200E05049 /* LOTPointInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CF891F16F29200E05049 /* LOTPointInterpolator.h */; }; + 6274CF8D1F16F29200E05049 /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF8A1F16F29200E05049 /* LOTPointInterpolator.m */; }; + 6274CF8E1F16F29200E05049 /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF8A1F16F29200E05049 /* LOTPointInterpolator.m */; }; + 6274CF8F1F16F29200E05049 /* LOTPointInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF8A1F16F29200E05049 /* LOTPointInterpolator.m */; }; + 6274CF991F17E92F00E05049 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CF971F17E92F00E05049 /* LOTSizeInterpolator.h */; }; + 6274CF9A1F17E92F00E05049 /* LOTSizeInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CF971F17E92F00E05049 /* LOTSizeInterpolator.h */; }; + 6274CF9B1F17E92F00E05049 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF981F17E92F00E05049 /* LOTSizeInterpolator.m */; }; + 6274CF9C1F17E92F00E05049 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF981F17E92F00E05049 /* LOTSizeInterpolator.m */; }; + 6274CF9D1F17E92F00E05049 /* LOTSizeInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF981F17E92F00E05049 /* LOTSizeInterpolator.m */; }; + 6274CFA01F17E94C00E05049 /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CF9E1F17E94C00E05049 /* LOTPathInterpolator.h */; }; + 6274CFA11F17E94C00E05049 /* LOTPathInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CF9E1F17E94C00E05049 /* LOTPathInterpolator.h */; }; + 6274CFA21F17E94C00E05049 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF9F1F17E94C00E05049 /* LOTPathInterpolator.m */; }; + 6274CFA31F17E94C00E05049 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF9F1F17E94C00E05049 /* LOTPathInterpolator.m */; }; + 6274CFA41F17E94C00E05049 /* LOTPathInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CF9F1F17E94C00E05049 /* LOTPathInterpolator.m */; }; + 6274CFA81F17E98200E05049 /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CFA61F17E98200E05049 /* LOTColorInterpolator.h */; }; + 6274CFA91F17E98200E05049 /* LOTColorInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CFA61F17E98200E05049 /* LOTColorInterpolator.h */; }; + 6274CFAA1F17E98200E05049 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CFA71F17E98200E05049 /* LOTColorInterpolator.m */; }; + 6274CFAB1F17E98200E05049 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CFA71F17E98200E05049 /* LOTColorInterpolator.m */; }; + 6274CFAC1F17E98200E05049 /* LOTColorInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CFA71F17E98200E05049 /* LOTColorInterpolator.m */; }; + 6274CFAF1F17E99600E05049 /* LOTRectInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CFAD1F17E99600E05049 /* LOTRectInterpolator.h */; }; + 6274CFB01F17E99600E05049 /* LOTRectInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274CFAD1F17E99600E05049 /* LOTRectInterpolator.h */; }; + 6274CFB11F17E99600E05049 /* LOTRectInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CFAE1F17E99600E05049 /* LOTRectInterpolator.m */; }; + 6274CFB21F17E99600E05049 /* LOTRectInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CFAE1F17E99600E05049 /* LOTRectInterpolator.m */; }; + 6274CFB31F17E99600E05049 /* LOTRectInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274CFAE1F17E99600E05049 /* LOTRectInterpolator.m */; }; + 6274D00D1F1D6CE200E05049 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274D00B1F1D6CE200E05049 /* LOTStrokeRenderer.h */; }; + 6274D00E1F1D6CE200E05049 /* LOTStrokeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274D00B1F1D6CE200E05049 /* LOTStrokeRenderer.h */; }; + 6274D00F1F1D6CE200E05049 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D00C1F1D6CE200E05049 /* LOTStrokeRenderer.m */; }; + 6274D0101F1D6CE200E05049 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D00C1F1D6CE200E05049 /* LOTStrokeRenderer.m */; }; + 6274D0111F1D6CE200E05049 /* LOTStrokeRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D00C1F1D6CE200E05049 /* LOTStrokeRenderer.m */; }; + 6274D01A1F1E82D000E05049 /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274D0181F1E82D000E05049 /* LOTLayerContainer.h */; }; + 6274D01B1F1E82D000E05049 /* LOTLayerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274D0181F1E82D000E05049 /* LOTLayerContainer.h */; }; + 6274D01C1F1E82D000E05049 /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0191F1E82D000E05049 /* LOTLayerContainer.m */; }; + 6274D01D1F1E82D000E05049 /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0191F1E82D000E05049 /* LOTLayerContainer.m */; }; + 6274D01E1F1E82D000E05049 /* LOTLayerContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0191F1E82D000E05049 /* LOTLayerContainer.m */; }; + 6274D0211F1E830E00E05049 /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274D01F1F1E830E00E05049 /* LOTTransformInterpolator.h */; }; + 6274D0221F1E830E00E05049 /* LOTTransformInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6274D01F1F1E830E00E05049 /* LOTTransformInterpolator.h */; }; + 6274D0231F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */; }; + 6274D0241F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */; }; + 6274D0251F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */; }; + 62BFC2DE1F14298D0068A342 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D01F14298D0068A342 /* LOTAnimatorNode.h */; }; + 62BFC2DF1F14298D0068A342 /* LOTAnimatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D01F14298D0068A342 /* LOTAnimatorNode.h */; }; + 62BFC2E01F14298D0068A342 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D11F14298D0068A342 /* LOTAnimatorNode.m */; }; + 62BFC2E11F14298D0068A342 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D11F14298D0068A342 /* LOTAnimatorNode.m */; }; + 62BFC2E21F14298D0068A342 /* LOTAnimatorNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D11F14298D0068A342 /* LOTAnimatorNode.m */; }; + 62BFC2E31F14298D0068A342 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D21F14298D0068A342 /* LOTFillRenderer.h */; }; + 62BFC2E41F14298D0068A342 /* LOTFillRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D21F14298D0068A342 /* LOTFillRenderer.h */; }; + 62BFC2E51F14298D0068A342 /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D31F14298D0068A342 /* LOTFillRenderer.m */; }; + 62BFC2E61F14298D0068A342 /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D31F14298D0068A342 /* LOTFillRenderer.m */; }; + 62BFC2E71F14298D0068A342 /* LOTFillRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D31F14298D0068A342 /* LOTFillRenderer.m */; }; + 62BFC2E81F14298D0068A342 /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D41F14298D0068A342 /* LOTKeyframe.h */; }; + 62BFC2E91F14298D0068A342 /* LOTKeyframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D41F14298D0068A342 /* LOTKeyframe.h */; }; + 62BFC2EA1F14298D0068A342 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D51F14298D0068A342 /* LOTKeyframe.m */; }; + 62BFC2EB1F14298D0068A342 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D51F14298D0068A342 /* LOTKeyframe.m */; }; + 62BFC2EC1F14298D0068A342 /* LOTKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D51F14298D0068A342 /* LOTKeyframe.m */; }; + 62BFC2ED1F14298D0068A342 /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D61F14298D0068A342 /* LOTPathAnimator.h */; }; + 62BFC2EE1F14298D0068A342 /* LOTPathAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D61F14298D0068A342 /* LOTPathAnimator.h */; }; + 62BFC2EF1F14298D0068A342 /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D71F14298D0068A342 /* LOTPathAnimator.m */; }; + 62BFC2F01F14298D0068A342 /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D71F14298D0068A342 /* LOTPathAnimator.m */; }; + 62BFC2F11F14298D0068A342 /* LOTPathAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D71F14298D0068A342 /* LOTPathAnimator.m */; }; + 62BFC2F21F14298D0068A342 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D81F14298D0068A342 /* LOTRenderGroup.h */; }; + 62BFC2F31F14298D0068A342 /* LOTRenderGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2D81F14298D0068A342 /* LOTRenderGroup.h */; }; + 62BFC2F41F14298D0068A342 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D91F14298D0068A342 /* LOTRenderGroup.m */; }; + 62BFC2F51F14298D0068A342 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D91F14298D0068A342 /* LOTRenderGroup.m */; }; + 62BFC2F61F14298D0068A342 /* LOTRenderGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2D91F14298D0068A342 /* LOTRenderGroup.m */; }; + 62BFC2F71F14298D0068A342 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2DA1F14298D0068A342 /* LOTRenderNode.h */; }; + 62BFC2F81F14298D0068A342 /* LOTRenderNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2DA1F14298D0068A342 /* LOTRenderNode.h */; }; + 62BFC2F91F14298D0068A342 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2DB1F14298D0068A342 /* LOTRenderNode.m */; }; + 62BFC2FA1F14298D0068A342 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2DB1F14298D0068A342 /* LOTRenderNode.m */; }; + 62BFC2FB1F14298D0068A342 /* LOTRenderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2DB1F14298D0068A342 /* LOTRenderNode.m */; }; + 62BFC2FC1F14298D0068A342 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2DC1F14298D0068A342 /* LOTValueInterpolator.h */; }; + 62BFC2FD1F14298D0068A342 /* LOTValueInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC2DC1F14298D0068A342 /* LOTValueInterpolator.h */; }; + 62BFC2FE1F14298D0068A342 /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2DD1F14298D0068A342 /* LOTValueInterpolator.m */; }; + 62BFC2FF1F14298D0068A342 /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2DD1F14298D0068A342 /* LOTValueInterpolator.m */; }; + 62BFC3001F14298D0068A342 /* LOTValueInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC2DD1F14298D0068A342 /* LOTValueInterpolator.m */; }; + 62BFC3031F1449380068A342 /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC3011F1449380068A342 /* LOTBezierData.h */; }; + 62BFC3041F1449380068A342 /* LOTBezierData.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BFC3011F1449380068A342 /* LOTBezierData.h */; }; + 62BFC3051F1449380068A342 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC3021F1449380068A342 /* LOTBezierData.m */; }; + 62BFC3061F1449380068A342 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC3021F1449380068A342 /* LOTBezierData.m */; }; + 62BFC3071F1449380068A342 /* LOTBezierData.m in Sources */ = {isa = PBXBuildFile; fileRef = 62BFC3021F1449380068A342 /* LOTBezierData.m */; }; + 62C9EA241F1EB49000DE7D07 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C9EA221F1EB49000DE7D07 /* LOTCompositionContainer.h */; }; + 62C9EA251F1EB49000DE7D07 /* LOTCompositionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C9EA221F1EB49000DE7D07 /* LOTCompositionContainer.h */; }; + 62C9EA261F1EB49000DE7D07 /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA231F1EB49000DE7D07 /* LOTCompositionContainer.m */; }; + 62C9EA271F1EB49000DE7D07 /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA231F1EB49000DE7D07 /* LOTCompositionContainer.m */; }; + 62C9EA281F1EB49000DE7D07 /* LOTCompositionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA231F1EB49000DE7D07 /* LOTCompositionContainer.m */; }; + 62C9EA431F1FDBF000DE7D07 /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C9EA411F1FDBF000DE7D07 /* LOTCircleAnimator.h */; }; + 62C9EA441F1FDBF000DE7D07 /* LOTCircleAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C9EA411F1FDBF000DE7D07 /* LOTCircleAnimator.h */; }; + 62C9EA451F1FDBF000DE7D07 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA421F1FDBF000DE7D07 /* LOTCircleAnimator.m */; }; + 62C9EA461F1FDBF000DE7D07 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA421F1FDBF000DE7D07 /* LOTCircleAnimator.m */; }; + 62C9EA471F1FDBF000DE7D07 /* LOTCircleAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA421F1FDBF000DE7D07 /* LOTCircleAnimator.m */; }; + 62C9EA4A1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C9EA481F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h */; }; + 62C9EA4B1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C9EA481F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h */; }; + 62C9EA4C1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA491F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m */; }; + 62C9EA4D1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA491F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m */; }; + 62C9EA4E1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C9EA491F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m */; }; 62CA5A051E3C179F002D7188 /* LOTAnimationTransitionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CA59C41E3C179F002D7188 /* LOTAnimationTransitionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 62CA5A071E3C179F002D7188 /* Lottie.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CA59C61E3C179F002D7188 /* Lottie.h */; settings = {ATTRIBUTES = (Public, ); }; }; 847709411E875369009CE1B5 /* LOTLayerGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 484EBA241E57898D00D4CAD9 /* LOTLayerGroup.m */; }; @@ -311,6 +466,68 @@ 4883E4ED1E5FA5EE00027E57 /* LOTAssetGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTAssetGroup.m; sourceTree = ""; }; 489F8E101E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTStrokeShapeLayer.h; sourceTree = ""; }; 489F8E111E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTStrokeShapeLayer.m; sourceTree = ""; }; + 6201FAE41F200B4A00A047C9 /* LOTMaskContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTMaskContainer.h; sourceTree = ""; }; + 6201FAE51F200B4A00A047C9 /* LOTMaskContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTMaskContainer.m; sourceTree = ""; }; + 621A4F661F216DC60065E14F /* LOTBezierPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTBezierPath.h; sourceTree = ""; }; + 621A4F671F216DC60065E14F /* LOTBezierPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTBezierPath.m; sourceTree = ""; }; + 621A4F6E1F2275980065E14F /* LOTTrimPathNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTTrimPathNode.h; path = "lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h"; sourceTree = SOURCE_ROOT; }; + 621A4F6F1F2275980065E14F /* LOTTrimPathNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTTrimPathNode.m; path = "lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m"; sourceTree = SOURCE_ROOT; }; + 622F75E71F29508D00269858 /* LOTShapeGradientFill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTShapeGradientFill.h; sourceTree = ""; }; + 622F75E81F29508D00269858 /* LOTShapeGradientFill.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTShapeGradientFill.m; sourceTree = ""; }; + 622F762A1F2A8CBA00269858 /* LOTShapeStar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTShapeStar.h; sourceTree = ""; }; + 622F762B1F2A8CBA00269858 /* LOTShapeStar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTShapeStar.m; sourceTree = ""; }; + 622F76331F2A91CA00269858 /* LOTPolystarAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTPolystarAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h"; sourceTree = SOURCE_ROOT; }; + 622F76341F2A91CA00269858 /* LOTPolystarAnimator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTPolystarAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m"; sourceTree = SOURCE_ROOT; }; + 622F763A1F2A92FC00269858 /* LOTPolygonAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTPolygonAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h"; sourceTree = SOURCE_ROOT; }; + 622F763B1F2A92FC00269858 /* LOTPolygonAnimator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTPolygonAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m"; sourceTree = SOURCE_ROOT; }; + 622F764C1F2AC1BF00269858 /* LOTArrayInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTArrayInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 622F764D1F2AC1BF00269858 /* LOTArrayInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTArrayInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 622F76531F2AC70400269858 /* LOTGradientFillRender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTGradientFillRender.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h"; sourceTree = SOURCE_ROOT; }; + 622F76541F2AC70400269858 /* LOTGradientFillRender.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTGradientFillRender.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m"; sourceTree = SOURCE_ROOT; }; + 622F76621F2BCA7700269858 /* LOTShapeRepeater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTShapeRepeater.h; sourceTree = ""; }; + 622F76631F2BCA7700269858 /* LOTShapeRepeater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTShapeRepeater.m; sourceTree = ""; }; + 622F76691F2BCE1300269858 /* LOTRepeaterRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTRepeaterRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h"; sourceTree = SOURCE_ROOT; }; + 622F766A1F2BCE1300269858 /* LOTRepeaterRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTRepeaterRenderer.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m"; sourceTree = SOURCE_ROOT; }; + 6274CEB71F157DCD00E05049 /* LOTNumberInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTNumberInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 6274CEB81F157DCD00E05049 /* LOTNumberInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTNumberInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 6274CF891F16F29200E05049 /* LOTPointInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTPointInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 6274CF8A1F16F29200E05049 /* LOTPointInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTPointInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 6274CF971F17E92F00E05049 /* LOTSizeInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTSizeInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 6274CF981F17E92F00E05049 /* LOTSizeInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTSizeInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 6274CF9E1F17E94C00E05049 /* LOTPathInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTPathInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 6274CF9F1F17E94C00E05049 /* LOTPathInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTPathInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 6274CFA61F17E98200E05049 /* LOTColorInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTColorInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 6274CFA71F17E98200E05049 /* LOTColorInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTColorInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 6274CFAD1F17E99600E05049 /* LOTRectInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTRectInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 6274CFAE1F17E99600E05049 /* LOTRectInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTRectInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 6274D00B1F1D6CE200E05049 /* LOTStrokeRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTStrokeRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h"; sourceTree = SOURCE_ROOT; }; + 6274D00C1F1D6CE200E05049 /* LOTStrokeRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTStrokeRenderer.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m"; sourceTree = SOURCE_ROOT; }; + 6274D0181F1E82D000E05049 /* LOTLayerContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTLayerContainer.h; sourceTree = ""; }; + 6274D0191F1E82D000E05049 /* LOTLayerContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTLayerContainer.m; sourceTree = ""; }; + 6274D01F1F1E830E00E05049 /* LOTTransformInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTTransformInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTTransformInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 62BFC2D01F14298D0068A342 /* LOTAnimatorNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTAnimatorNode.h; path = "lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h"; sourceTree = SOURCE_ROOT; }; + 62BFC2D11F14298D0068A342 /* LOTAnimatorNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTAnimatorNode.m; path = "lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m"; sourceTree = SOURCE_ROOT; }; + 62BFC2D21F14298D0068A342 /* LOTFillRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTFillRenderer.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h"; sourceTree = SOURCE_ROOT; }; + 62BFC2D31F14298D0068A342 /* LOTFillRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTFillRenderer.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m"; sourceTree = SOURCE_ROOT; }; + 62BFC2D41F14298D0068A342 /* LOTKeyframe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTKeyframe.h; path = "lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h"; sourceTree = SOURCE_ROOT; }; + 62BFC2D51F14298D0068A342 /* LOTKeyframe.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTKeyframe.m; path = "lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m"; sourceTree = SOURCE_ROOT; }; + 62BFC2D61F14298D0068A342 /* LOTPathAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTPathAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h"; sourceTree = SOURCE_ROOT; }; + 62BFC2D71F14298D0068A342 /* LOTPathAnimator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTPathAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m"; sourceTree = SOURCE_ROOT; }; + 62BFC2D81F14298D0068A342 /* LOTRenderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTRenderGroup.h; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h"; sourceTree = SOURCE_ROOT; }; + 62BFC2D91F14298D0068A342 /* LOTRenderGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTRenderGroup.m; path = "lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m"; sourceTree = SOURCE_ROOT; }; + 62BFC2DA1F14298D0068A342 /* LOTRenderNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTRenderNode.h; path = "lottie-ios/Classes/RenderSystem/LOTRenderNode.h"; sourceTree = SOURCE_ROOT; }; + 62BFC2DB1F14298D0068A342 /* LOTRenderNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTRenderNode.m; path = "lottie-ios/Classes/RenderSystem/LOTRenderNode.m"; sourceTree = SOURCE_ROOT; }; + 62BFC2DC1F14298D0068A342 /* LOTValueInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTValueInterpolator.h; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h"; sourceTree = SOURCE_ROOT; }; + 62BFC2DD1F14298D0068A342 /* LOTValueInterpolator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTValueInterpolator.m; path = "lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m"; sourceTree = SOURCE_ROOT; }; + 62BFC3011F1449380068A342 /* LOTBezierData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTBezierData.h; sourceTree = ""; }; + 62BFC3021F1449380068A342 /* LOTBezierData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTBezierData.m; sourceTree = ""; }; + 62C9EA221F1EB49000DE7D07 /* LOTCompositionContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTCompositionContainer.h; sourceTree = ""; }; + 62C9EA231F1EB49000DE7D07 /* LOTCompositionContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LOTCompositionContainer.m; sourceTree = ""; }; + 62C9EA411F1FDBF000DE7D07 /* LOTCircleAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTCircleAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h"; sourceTree = SOURCE_ROOT; }; + 62C9EA421F1FDBF000DE7D07 /* LOTCircleAnimator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTCircleAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m"; sourceTree = SOURCE_ROOT; }; + 62C9EA481F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LOTRoundedRectAnimator.h; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h"; sourceTree = SOURCE_ROOT; }; + 62C9EA491F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LOTRoundedRectAnimator.m; path = "lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m"; sourceTree = SOURCE_ROOT; }; 62CA59B81E3C173B002D7188 /* Lottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Lottie.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 62CA59BC1E3C173B002D7188 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 62CA59C41E3C179F002D7188 /* LOTAnimationTransitionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LOTAnimationTransitionController.h; sourceTree = ""; }; @@ -367,6 +584,12 @@ 481A4A251E4A7885003CF62B /* LOTShapeLayerView.m */, 489F8E101E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.h */, 489F8E111E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m */, + 6274D0181F1E82D000E05049 /* LOTLayerContainer.h */, + 6274D0191F1E82D000E05049 /* LOTLayerContainer.m */, + 6201FAE41F200B4A00A047C9 /* LOTMaskContainer.h */, + 6201FAE51F200B4A00A047C9 /* LOTMaskContainer.m */, + 62C9EA221F1EB49000DE7D07 /* LOTCompositionContainer.h */, + 62C9EA231F1EB49000DE7D07 /* LOTCompositionContainer.m */, ); name = AnimatableLayers; path = "lottie-ios/Classes/AnimatableLayers"; @@ -375,6 +598,10 @@ 481A4A261E4A7885003CF62B /* AnimatableProperties */ = { isa = PBXGroup; children = ( + 62BFC2D41F14298D0068A342 /* LOTKeyframe.h */, + 62BFC2D51F14298D0068A342 /* LOTKeyframe.m */, + 62BFC3011F1449380068A342 /* LOTBezierData.h */, + 62BFC3021F1449380068A342 /* LOTBezierData.m */, 481A4A271E4A7885003CF62B /* LOTAnimatableBoundsValue.h */, 481A4A281E4A7885003CF62B /* LOTAnimatableBoundsValue.m */, 481A4A291E4A7885003CF62B /* LOTAnimatableColorValue.h */, @@ -413,6 +640,8 @@ 481A4A3C1E4A7885003CF62B /* LOTHelpers.h */, 481A4A3D1E4A7885003CF62B /* UIColor+Expanded.h */, 481A4A3E1E4A7885003CF62B /* UIColor+Expanded.m */, + 621A4F661F216DC60065E14F /* LOTBezierPath.h */, + 621A4F671F216DC60065E14F /* LOTBezierPath.m */, ); name = Extensions; path = "lottie-ios/Classes/Extensions"; @@ -421,6 +650,7 @@ 481A4A3F1E4A7885003CF62B /* Models */ = { isa = PBXGroup; children = ( + 481A4A261E4A7885003CF62B /* AnimatableProperties */, 4883E4EC1E5FA5EE00027E57 /* LOTAssetGroup.h */, 4883E4ED1E5FA5EE00027E57 /* LOTAssetGroup.m */, 481A4A401E4A7885003CF62B /* LOTComposition.h */, @@ -436,10 +666,16 @@ 484EBA241E57898D00D4CAD9 /* LOTLayerGroup.m */, 481A4A471E4A7885003CF62B /* LOTShapeCircle.h */, 481A4A481E4A7885003CF62B /* LOTShapeCircle.m */, + 622F75E71F29508D00269858 /* LOTShapeGradientFill.h */, + 622F75E81F29508D00269858 /* LOTShapeGradientFill.m */, 481A4A491E4A7885003CF62B /* LOTShapeFill.h */, 481A4A4A1E4A7885003CF62B /* LOTShapeFill.m */, + 622F76621F2BCA7700269858 /* LOTShapeRepeater.h */, + 622F76631F2BCA7700269858 /* LOTShapeRepeater.m */, 481A4A4B1E4A7885003CF62B /* LOTShapeGroup.h */, 481A4A4C1E4A7885003CF62B /* LOTShapeGroup.m */, + 622F762A1F2A8CBA00269858 /* LOTShapeStar.h */, + 622F762B1F2A8CBA00269858 /* LOTShapeStar.m */, 481A4A4D1E4A7885003CF62B /* LOTShapePath.h */, 481A4A4E1E4A7885003CF62B /* LOTShapePath.m */, 481A4A4F1E4A7885003CF62B /* LOTShapeRectangle.h */, @@ -485,6 +721,89 @@ path = "lottie-ios/Classes/MacCompatability"; sourceTree = SOURCE_ROOT; }; + 621A4F6D1F22754F0065E14F /* ManipulatorNodes */ = { + isa = PBXGroup; + children = ( + 621A4F6E1F2275980065E14F /* LOTTrimPathNode.h */, + 621A4F6F1F2275980065E14F /* LOTTrimPathNode.m */, + ); + name = ManipulatorNodes; + sourceTree = ""; + }; + 6274CFA51F17E95400E05049 /* InterpolatorNodes */ = { + isa = PBXGroup; + children = ( + 62BFC2DC1F14298D0068A342 /* LOTValueInterpolator.h */, + 62BFC2DD1F14298D0068A342 /* LOTValueInterpolator.m */, + 6274CEB71F157DCD00E05049 /* LOTNumberInterpolator.h */, + 6274CEB81F157DCD00E05049 /* LOTNumberInterpolator.m */, + 6274CF891F16F29200E05049 /* LOTPointInterpolator.h */, + 6274CF8A1F16F29200E05049 /* LOTPointInterpolator.m */, + 6274CF971F17E92F00E05049 /* LOTSizeInterpolator.h */, + 6274CF981F17E92F00E05049 /* LOTSizeInterpolator.m */, + 6274CFAD1F17E99600E05049 /* LOTRectInterpolator.h */, + 6274CFAE1F17E99600E05049 /* LOTRectInterpolator.m */, + 6274CF9E1F17E94C00E05049 /* LOTPathInterpolator.h */, + 6274CF9F1F17E94C00E05049 /* LOTPathInterpolator.m */, + 6274D01F1F1E830E00E05049 /* LOTTransformInterpolator.h */, + 6274D0201F1E830E00E05049 /* LOTTransformInterpolator.m */, + 6274CFA61F17E98200E05049 /* LOTColorInterpolator.h */, + 6274CFA71F17E98200E05049 /* LOTColorInterpolator.m */, + 622F764C1F2AC1BF00269858 /* LOTArrayInterpolator.h */, + 622F764D1F2AC1BF00269858 /* LOTArrayInterpolator.m */, + ); + name = InterpolatorNodes; + sourceTree = ""; + }; + 6274D0091F1D6B3300E05049 /* RenderNodes */ = { + isa = PBXGroup; + children = ( + 6274D00B1F1D6CE200E05049 /* LOTStrokeRenderer.h */, + 6274D00C1F1D6CE200E05049 /* LOTStrokeRenderer.m */, + 62BFC2D81F14298D0068A342 /* LOTRenderGroup.h */, + 62BFC2D91F14298D0068A342 /* LOTRenderGroup.m */, + 62BFC2D21F14298D0068A342 /* LOTFillRenderer.h */, + 62BFC2D31F14298D0068A342 /* LOTFillRenderer.m */, + 622F76531F2AC70400269858 /* LOTGradientFillRender.h */, + 622F76541F2AC70400269858 /* LOTGradientFillRender.m */, + 622F76691F2BCE1300269858 /* LOTRepeaterRenderer.h */, + 622F766A1F2BCE1300269858 /* LOTRepeaterRenderer.m */, + ); + name = RenderNodes; + sourceTree = ""; + }; + 6274D00A1F1D6B3C00E05049 /* AnimatorNodes */ = { + isa = PBXGroup; + children = ( + 62BFC2D61F14298D0068A342 /* LOTPathAnimator.h */, + 62BFC2D71F14298D0068A342 /* LOTPathAnimator.m */, + 62C9EA411F1FDBF000DE7D07 /* LOTCircleAnimator.h */, + 62C9EA421F1FDBF000DE7D07 /* LOTCircleAnimator.m */, + 62C9EA481F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h */, + 62C9EA491F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m */, + 622F76331F2A91CA00269858 /* LOTPolystarAnimator.h */, + 622F76341F2A91CA00269858 /* LOTPolystarAnimator.m */, + 622F763A1F2A92FC00269858 /* LOTPolygonAnimator.h */, + 622F763B1F2A92FC00269858 /* LOTPolygonAnimator.m */, + ); + name = AnimatorNodes; + sourceTree = ""; + }; + 62BFC2CF1F1428E80068A342 /* RenderSystem */ = { + isa = PBXGroup; + children = ( + 62BFC2D01F14298D0068A342 /* LOTAnimatorNode.h */, + 62BFC2D11F14298D0068A342 /* LOTAnimatorNode.m */, + 62BFC2DA1F14298D0068A342 /* LOTRenderNode.h */, + 62BFC2DB1F14298D0068A342 /* LOTRenderNode.m */, + 6274D00A1F1D6B3C00E05049 /* AnimatorNodes */, + 6274CFA51F17E95400E05049 /* InterpolatorNodes */, + 621A4F6D1F22754F0065E14F /* ManipulatorNodes */, + 6274D0091F1D6B3300E05049 /* RenderNodes */, + ); + name = RenderSystem; + sourceTree = ""; + }; 62CA59AE1E3C173B002D7188 = { isa = PBXGroup; children = ( @@ -507,9 +826,9 @@ 62CA59BA1E3C173B002D7188 /* Lottie */ = { isa = PBXGroup; children = ( + 62BFC2CF1F1428E80068A342 /* RenderSystem */, 481A4AD71E4A78A0003CF62B /* MacCompatability */, 481A4A171E4A7885003CF62B /* AnimatableLayers */, - 481A4A261E4A7885003CF62B /* AnimatableProperties */, 481A4A341E4A7885003CF62B /* AnimationCache */, 481A4A371E4A7885003CF62B /* Extensions */, 481A4A3F1E4A7885003CF62B /* Models */, @@ -541,45 +860,76 @@ files = ( 481A4AD51E4A7885003CF62B /* LOTAnimationView_Internal.h in Headers */, 481A4A7F1E4A7885003CF62B /* LOTAnimatableNumberValue.h in Headers */, + 621A4F681F216DC60065E14F /* LOTBezierPath.h in Headers */, + 6274CEB91F157DCD00E05049 /* LOTNumberInterpolator.h in Headers */, 481A4AAF1E4A7885003CF62B /* LOTModels.h in Headers */, FA1F5AA01E42B52800FF36BF /* LOTAnimationView.h in Headers */, 481A4A631E4A7885003CF62B /* LOTGroupLayerView.h in Headers */, 481A4AA31E4A7885003CF62B /* LOTComposition.h in Headers */, 481A4A9F1E4A7885003CF62B /* UIColor+Expanded.h in Headers */, 481A4AB51E4A7885003CF62B /* LOTShapeFill.h in Headers */, + 621A4F701F2275980065E14F /* LOTTrimPathNode.h in Headers */, + 622F76351F2A91CA00269858 /* LOTPolystarAnimator.h in Headers */, 481A4A6B1E4A7885003CF62B /* LOTMaskLayer.h in Headers */, 481A4AEE1E4A78A5003CF62B /* LOTPlatformCompat.h in Headers */, + 62BFC2F71F14298D0068A342 /* LOTRenderNode.h in Headers */, 48183C9C1E54E20B0039F121 /* CGGeometry+LOTAdditions.h in Headers */, 481A4A8F1E4A7885003CF62B /* LOTAnimatableValue.h in Headers */, + 6274D01A1F1E82D000E05049 /* LOTLayerContainer.h in Headers */, 481A4ABD1E4A7885003CF62B /* LOTShapePath.h in Headers */, 481A4A831E4A7885003CF62B /* LOTAnimatablePointValue.h in Headers */, + 62C9EA241F1EB49000DE7D07 /* LOTCompositionContainer.h in Headers */, 481A4A731E4A7885003CF62B /* LOTShapeLayerView.h in Headers */, 62CA5A051E3C179F002D7188 /* LOTAnimationTransitionController.h in Headers */, 481A4A9D1E4A7885003CF62B /* LOTHelpers.h in Headers */, + 62BFC2E81F14298D0068A342 /* LOTKeyframe.h in Headers */, 62CA5A071E3C179F002D7188 /* Lottie.h in Headers */, 481A4AB91E4A7885003CF62B /* LOTShapeGroup.h in Headers */, 481A4A5F1E4A7885003CF62B /* LOTEllipseShapeLayer.h in Headers */, + 62C9EA431F1FDBF000DE7D07 /* LOTCircleAnimator.h in Headers */, 481A4ACD1E4A7885003CF62B /* LOTShapeTrimPath.h in Headers */, + 6274D00D1F1D6CE200E05049 /* LOTStrokeRenderer.h in Headers */, + 62BFC2F21F14298D0068A342 /* LOTRenderGroup.h in Headers */, 4883E4F01E5FA5EE00027E57 /* LOTAssetGroup.h in Headers */, 489F8E121E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.h in Headers */, 484EBA251E57898D00D4CAD9 /* LOTLayerGroup.h in Headers */, 481A4A671E4A7885003CF62B /* LOTLayerView.h in Headers */, 481A4AC11E4A7885003CF62B /* LOTShapeRectangle.h in Headers */, + 622F763C1F2A92FC00269858 /* LOTPolygonAnimator.h in Headers */, 481A4AC51E4A7885003CF62B /* LOTShapeStroke.h in Headers */, 481A4A911E4A7885003CF62B /* LOTAnimationCache.h in Headers */, + 62BFC2FC1F14298D0068A342 /* LOTValueInterpolator.h in Headers */, + 6274D0211F1E830E00E05049 /* LOTTransformInterpolator.h in Headers */, 481A4A6F1E4A7885003CF62B /* LOTRectShapeLayer.h in Headers */, 481A4A5B1E4A7885003CF62B /* LOTAnimatableLayer.h in Headers */, 481A4AC91E4A7885003CF62B /* LOTShapeTransform.h in Headers */, + 6274CF8B1F16F29200E05049 /* LOTPointInterpolator.h in Headers */, + 622F762C1F2A8CBA00269858 /* LOTShapeStar.h in Headers */, 481A4A7B1E4A7885003CF62B /* LOTAnimatableColorValue.h in Headers */, + 622F76641F2BCA7700269858 /* LOTShapeRepeater.h in Headers */, + 622F766B1F2BCE1300269858 /* LOTRepeaterRenderer.h in Headers */, + 62C9EA4A1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h in Headers */, + 6201FAE61F200B4A00A047C9 /* LOTMaskContainer.h in Headers */, 481A4A771E4A7885003CF62B /* LOTAnimatableBoundsValue.h in Headers */, + 622F76551F2AC70400269858 /* LOTGradientFillRender.h in Headers */, + 6274CF991F17E92F00E05049 /* LOTSizeInterpolator.h in Headers */, + 62BFC2DE1F14298D0068A342 /* LOTAnimatorNode.h in Headers */, 481A4AB11E4A7885003CF62B /* LOTShapeCircle.h in Headers */, + 622F75E91F29508D00269858 /* LOTShapeGradientFill.h in Headers */, 481A4A8B1E4A7885003CF62B /* LOTAnimatableShapeValue.h in Headers */, + 62BFC2E31F14298D0068A342 /* LOTFillRenderer.h in Headers */, + 62BFC3031F1449380068A342 /* LOTBezierData.h in Headers */, + 62BFC2ED1F14298D0068A342 /* LOTPathAnimator.h in Headers */, 484EBA161E565AF700D4CAD9 /* LOTAsset.h in Headers */, 481A4AAB1E4A7885003CF62B /* LOTMask.h in Headers */, + 622F764E1F2AC1BF00269858 /* LOTArrayInterpolator.h in Headers */, + 6274CFA01F17E94C00E05049 /* LOTPathInterpolator.h in Headers */, 481A4A871E4A7885003CF62B /* LOTAnimatableScaleValue.h in Headers */, 481A4A951E4A7885003CF62B /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, + 6274CFAF1F17E99600E05049 /* LOTRectInterpolator.h in Headers */, 4883E4E71E5FA59200027E57 /* LOTCompositionLayer.h in Headers */, 481A4AA71E4A7885003CF62B /* LOTLayer.h in Headers */, + 6274CFA81F17E98200E05049 /* LOTColorInterpolator.h in Headers */, 2DBA19324CDD83B5F0F115B8 /* LOTAnimationView_Compat.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -590,12 +940,18 @@ files = ( 481A4AB61E4A7885003CF62B /* LOTShapeFill.h in Headers */, 481A4A841E4A7885003CF62B /* LOTAnimatablePointValue.h in Headers */, + 6274CEBA1F157DCD00E05049 /* LOTNumberInterpolator.h in Headers */, 489F8EAF1E4D21A400F2DEB7 /* LOTAnimationView_Compat.h in Headers */, + 6274CFA11F17E94C00E05049 /* LOTPathInterpolator.h in Headers */, 481A4AEC1E4A78A0003CF62B /* UIColor.h in Headers */, 481A4AEA1E4A78A0003CF62B /* UIBezierPath.h in Headers */, 481A4AE81E4A78A0003CF62B /* NSValue+Compat.h in Headers */, + 6274CF9A1F17E92F00E05049 /* LOTSizeInterpolator.h in Headers */, 481A4ABA1E4A7885003CF62B /* LOTShapeGroup.h in Headers */, 481A4AA81E4A7885003CF62B /* LOTLayer.h in Headers */, + 622F766C1F2BCE1300269858 /* LOTRepeaterRenderer.h in Headers */, + 622F76561F2AC70400269858 /* LOTGradientFillRender.h in Headers */, + 622F75EA1F29508D00269858 /* LOTShapeGradientFill.h in Headers */, 481A4A921E4A7885003CF62B /* LOTAnimationCache.h in Headers */, 481A4A8C1E4A7885003CF62B /* LOTAnimatableShapeValue.h in Headers */, 481A4A9E1E4A7885003CF62B /* LOTHelpers.h in Headers */, @@ -604,8 +960,17 @@ 481A4A641E4A7885003CF62B /* LOTGroupLayerView.h in Headers */, 481A4A781E4A7885003CF62B /* LOTAnimatableBoundsValue.h in Headers */, 4883E56F1E64EF9200027E57 /* LOTPlatformCompat.h in Headers */, + 62C9EA4B1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.h in Headers */, + 622F762D1F2A8CBA00269858 /* LOTShapeStar.h in Headers */, + 6274D0221F1E830E00E05049 /* LOTTransformInterpolator.h in Headers */, + 6274CFB01F17E99600E05049 /* LOTRectInterpolator.h in Headers */, + 62C9EA251F1EB49000DE7D07 /* LOTCompositionContainer.h in Headers */, 481A4AC21E4A7885003CF62B /* LOTShapeRectangle.h in Headers */, + 62BFC2F31F14298D0068A342 /* LOTRenderGroup.h in Headers */, + 62C9EA441F1FDBF000DE7D07 /* LOTCircleAnimator.h in Headers */, 481A4A601E4A7885003CF62B /* LOTEllipseShapeLayer.h in Headers */, + 62BFC3041F1449380068A342 /* LOTBezierData.h in Headers */, + 6201FAE71F200B4A00A047C9 /* LOTMaskContainer.h in Headers */, 481A4ACA1E4A7885003CF62B /* LOTShapeTransform.h in Headers */, 481A4AE51E4A78A0003CF62B /* CALayer+Compat.h in Headers */, 484EBA171E565AF700D4CAD9 /* LOTAsset.h in Headers */, @@ -618,21 +983,37 @@ 481A4A901E4A7885003CF62B /* LOTAnimatableValue.h in Headers */, 481A4A881E4A7885003CF62B /* LOTAnimatableScaleValue.h in Headers */, 481A4ABE1E4A7885003CF62B /* LOTShapePath.h in Headers */, + 622F76361F2A91CA00269858 /* LOTPolystarAnimator.h in Headers */, 481A4AD61E4A7885003CF62B /* LOTAnimationView_Internal.h in Headers */, FA1F5AA11E42B52800FF36BF /* LOTAnimationView.h in Headers */, + 62BFC2EE1F14298D0068A342 /* LOTPathAnimator.h in Headers */, + 62BFC2DF1F14298D0068A342 /* LOTAnimatorNode.h in Headers */, 481A4AC61E4A7885003CF62B /* LOTShapeStroke.h in Headers */, + 6274D00E1F1D6CE200E05049 /* LOTStrokeRenderer.h in Headers */, + 6274CFA91F17E98200E05049 /* LOTColorInterpolator.h in Headers */, + 622F764F1F2AC1BF00269858 /* LOTArrayInterpolator.h in Headers */, 481A4AA41E4A7885003CF62B /* LOTComposition.h in Headers */, 481A4A801E4A7885003CF62B /* LOTAnimatableNumberValue.h in Headers */, + 62BFC2E41F14298D0068A342 /* LOTFillRenderer.h in Headers */, 484EBA261E57898D00D4CAD9 /* LOTLayerGroup.h in Headers */, + 62BFC2FD1F14298D0068A342 /* LOTValueInterpolator.h in Headers */, 4883E4E81E5FA59200027E57 /* LOTCompositionLayer.h in Headers */, + 62BFC2E91F14298D0068A342 /* LOTKeyframe.h in Headers */, 481A4ACE1E4A7885003CF62B /* LOTShapeTrimPath.h in Headers */, 481A4AA01E4A7885003CF62B /* UIColor+Expanded.h in Headers */, 4883E4F11E5FA5EE00027E57 /* LOTAssetGroup.h in Headers */, + 6274CF8C1F16F29200E05049 /* LOTPointInterpolator.h in Headers */, + 6274D01B1F1E82D000E05049 /* LOTLayerContainer.h in Headers */, FAE1F7D71E428CBE002E0974 /* Lottie.h in Headers */, + 622F763D1F2A92FC00269858 /* LOTPolygonAnimator.h in Headers */, + 62BFC2F81F14298D0068A342 /* LOTRenderNode.h in Headers */, 481A4AAC1E4A7885003CF62B /* LOTMask.h in Headers */, 481A4A961E4A7885003CF62B /* CAAnimationGroup+LOTAnimatableGroup.h in Headers */, 481A4A741E4A7885003CF62B /* LOTShapeLayerView.h in Headers */, 481A4A5C1E4A7885003CF62B /* LOTAnimatableLayer.h in Headers */, + 622F76651F2BCA7700269858 /* LOTShapeRepeater.h in Headers */, + 621A4F691F216DC60065E14F /* LOTBezierPath.h in Headers */, + 621A4F711F2275980065E14F /* LOTTrimPathNode.h in Headers */, 481A4AB21E4A7885003CF62B /* LOTShapeCircle.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -754,41 +1135,72 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 62BFC2E01F14298D0068A342 /* LOTAnimatorNode.m in Sources */, 481A4ACB1E4A7885003CF62B /* LOTShapeTransform.m in Sources */, 484EBA271E57898D00D4CAD9 /* LOTLayerGroup.m in Sources */, + 622F763E1F2A92FC00269858 /* LOTPolygonAnimator.m in Sources */, 481A4A6D1E4A7885003CF62B /* LOTMaskLayer.m in Sources */, + 6274D01C1F1E82D000E05049 /* LOTLayerContainer.m in Sources */, 481A4A971E4A7885003CF62B /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, + 62BFC2EA1F14298D0068A342 /* LOTKeyframe.m in Sources */, 481A4A811E4A7885003CF62B /* LOTAnimatableNumberValue.m in Sources */, 481A4A931E4A7885003CF62B /* LOTAnimationCache.m in Sources */, + 622F76661F2BCA7700269858 /* LOTShapeRepeater.m in Sources */, 4883E4E91E5FA59200027E57 /* LOTCompositionLayer.m in Sources */, 481A4AA11E4A7885003CF62B /* UIColor+Expanded.m in Sources */, 481A4AA51E4A7885003CF62B /* LOTComposition.m in Sources */, + 62BFC3051F1449380068A342 /* LOTBezierData.m in Sources */, 481A4A7D1E4A7885003CF62B /* LOTAnimatableColorValue.m in Sources */, 481A4A651E4A7885003CF62B /* LOTGroupLayerView.m in Sources */, 481A4AB71E4A7885003CF62B /* LOTShapeFill.m in Sources */, 481A4A691E4A7885003CF62B /* LOTLayerView.m in Sources */, 489F8E141E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m in Sources */, + 62C9EA451F1FDBF000DE7D07 /* LOTCircleAnimator.m in Sources */, + 622F76501F2AC1BF00269858 /* LOTArrayInterpolator.m in Sources */, + 6201FAE81F200B4A00A047C9 /* LOTMaskContainer.m in Sources */, 481A4AC31E4A7885003CF62B /* LOTShapeRectangle.m in Sources */, 481A4AD11E4A7885003CF62B /* LOTAnimationTransitionController.m in Sources */, + 62C9EA261F1EB49000DE7D07 /* LOTCompositionContainer.m in Sources */, + 622F766D1F2BCE1300269858 /* LOTRepeaterRenderer.m in Sources */, + 622F76371F2A91CA00269858 /* LOTPolystarAnimator.m in Sources */, + 6274CF8D1F16F29200E05049 /* LOTPointInterpolator.m in Sources */, 481A4AC71E4A7885003CF62B /* LOTShapeStroke.m in Sources */, + 6274CF9B1F17E92F00E05049 /* LOTSizeInterpolator.m in Sources */, + 62BFC2E51F14298D0068A342 /* LOTFillRenderer.m in Sources */, 481A4AA91E4A7885003CF62B /* LOTLayer.m in Sources */, + 62C9EA4C1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */, + 622F75EB1F29508D00269858 /* LOTShapeGradientFill.m in Sources */, 481A4ACF1E4A7885003CF62B /* LOTShapeTrimPath.m in Sources */, + 621A4F721F2275980065E14F /* LOTTrimPathNode.m in Sources */, 481A4A5D1E4A7885003CF62B /* LOTAnimatableLayer.m in Sources */, + 621A4F6A1F216DC60065E14F /* LOTBezierPath.m in Sources */, + 62BFC2F41F14298D0068A342 /* LOTRenderGroup.m in Sources */, + 6274CEBB1F157DCD00E05049 /* LOTNumberInterpolator.m in Sources */, 481A4ABB1E4A7885003CF62B /* LOTShapeGroup.m in Sources */, 481A4AAD1E4A7885003CF62B /* LOTMask.m in Sources */, + 62BFC2EF1F14298D0068A342 /* LOTPathAnimator.m in Sources */, + 622F762E1F2A8CBA00269858 /* LOTShapeStar.m in Sources */, 484EBA181E565AF700D4CAD9 /* LOTAsset.m in Sources */, 481A4A8D1E4A7885003CF62B /* LOTAnimatableShapeValue.m in Sources */, 481A4AB31E4A7885003CF62B /* LOTShapeCircle.m in Sources */, + 6274CFAA1F17E98200E05049 /* LOTColorInterpolator.m in Sources */, 481A4A711E4A7885003CF62B /* LOTRectShapeLayer.m in Sources */, 481A4A751E4A7885003CF62B /* LOTShapeLayerView.m in Sources */, + 62BFC2FE1F14298D0068A342 /* LOTValueInterpolator.m in Sources */, 48183C9E1E54E20B0039F121 /* CGGeometry+LOTAdditions.m in Sources */, + 62BFC2F91F14298D0068A342 /* LOTRenderNode.m in Sources */, + 6274CFB11F17E99600E05049 /* LOTRectInterpolator.m in Sources */, 481A4ABF1E4A7885003CF62B /* LOTShapePath.m in Sources */, + 622F76571F2AC70400269858 /* LOTGradientFillRender.m in Sources */, 481A4A611E4A7885003CF62B /* LOTEllipseShapeLayer.m in Sources */, 481A4A851E4A7885003CF62B /* LOTAnimatablePointValue.m in Sources */, 4883E4F21E5FA5EE00027E57 /* LOTAssetGroup.m in Sources */, 481A4A791E4A7885003CF62B /* LOTAnimatableBoundsValue.m in Sources */, 481A4AD31E4A7885003CF62B /* LOTAnimationView.m in Sources */, 481A4A891E4A7885003CF62B /* LOTAnimatableScaleValue.m in Sources */, + 6274D00F1F1D6CE200E05049 /* LOTStrokeRenderer.m in Sources */, + 6274CFA21F17E94C00E05049 /* LOTPathInterpolator.m in Sources */, + 6274D0231F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -796,41 +1208,72 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 62BFC2E21F14298D0068A342 /* LOTAnimatorNode.m in Sources */, 847709411E875369009CE1B5 /* LOTLayerGroup.m in Sources */, 4883E4FA1E5FA67200027E57 /* LOTStrokeShapeLayer.m in Sources */, + 622F76401F2A92FC00269858 /* LOTPolygonAnimator.m in Sources */, 4883E4FB1E5FA67200027E57 /* CGGeometry+LOTAdditions.m in Sources */, + 6274D01E1F1E82D000E05049 /* LOTLayerContainer.m in Sources */, 84FE12F81E4C1553009B157C /* LOTAnimatableLayer.m in Sources */, + 62BFC2EC1F14298D0068A342 /* LOTKeyframe.m in Sources */, 84FE12F91E4C1553009B157C /* LOTEllipseShapeLayer.m in Sources */, 84FE12FA1E4C1553009B157C /* LOTGroupLayerView.m in Sources */, + 622F76681F2BCA7700269858 /* LOTShapeRepeater.m in Sources */, 84FE12FB1E4C1553009B157C /* LOTLayerView.m in Sources */, 84FE12FC1E4C1553009B157C /* LOTMaskLayer.m in Sources */, 84FE12FD1E4C1553009B157C /* LOTRectShapeLayer.m in Sources */, + 62BFC3071F1449380068A342 /* LOTBezierData.m in Sources */, 4883E4F41E5FA5EE00027E57 /* LOTAssetGroup.m in Sources */, 84FE12FE1E4C1553009B157C /* LOTShapeLayerView.m in Sources */, 84FE12FF1E4C1553009B157C /* LOTAnimatableBoundsValue.m in Sources */, 84FE13001E4C1553009B157C /* LOTAnimatableColorValue.m in Sources */, 84FE13011E4C1553009B157C /* LOTAnimatableNumberValue.m in Sources */, + 62C9EA471F1FDBF000DE7D07 /* LOTCircleAnimator.m in Sources */, + 622F76521F2AC1BF00269858 /* LOTArrayInterpolator.m in Sources */, + 6201FAEA1F200B4A00A047C9 /* LOTMaskContainer.m in Sources */, 84FE13021E4C1553009B157C /* LOTAnimatablePointValue.m in Sources */, 84FE13031E4C1553009B157C /* LOTAnimatableScaleValue.m in Sources */, + 62C9EA281F1EB49000DE7D07 /* LOTCompositionContainer.m in Sources */, + 622F766F1F2BCE1300269858 /* LOTRepeaterRenderer.m in Sources */, + 622F76391F2A91CA00269858 /* LOTPolystarAnimator.m in Sources */, + 6274CF8F1F16F29200E05049 /* LOTPointInterpolator.m in Sources */, 84FE13041E4C1553009B157C /* LOTAnimatableShapeValue.m in Sources */, + 6274CF9D1F17E92F00E05049 /* LOTSizeInterpolator.m in Sources */, + 62BFC2E71F14298D0068A342 /* LOTFillRenderer.m in Sources */, 84FE13051E4C1553009B157C /* LOTAnimationCache.m in Sources */, + 62C9EA4E1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */, + 622F75ED1F29508D00269858 /* LOTShapeGradientFill.m in Sources */, 84FE13061E4C1553009B157C /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, + 621A4F741F2275980065E14F /* LOTTrimPathNode.m in Sources */, 84FE13081E4C1553009B157C /* UIColor+Expanded.m in Sources */, + 621A4F6C1F216DC60065E14F /* LOTBezierPath.m in Sources */, + 62BFC2F61F14298D0068A342 /* LOTRenderGroup.m in Sources */, + 6274CEBD1F157DCD00E05049 /* LOTNumberInterpolator.m in Sources */, 484EBA1A1E565AF700D4CAD9 /* LOTAsset.m in Sources */, 84FE13091E4C1553009B157C /* LOTComposition.m in Sources */, + 62BFC2F11F14298D0068A342 /* LOTPathAnimator.m in Sources */, + 622F76301F2A8CBA00269858 /* LOTShapeStar.m in Sources */, 84FE130A1E4C1553009B157C /* LOTLayer.m in Sources */, 84FE130B1E4C1553009B157C /* LOTMask.m in Sources */, 4883E4EB1E5FA59200027E57 /* LOTCompositionLayer.m in Sources */, + 6274CFAC1F17E98200E05049 /* LOTColorInterpolator.m in Sources */, 84FE130C1E4C1553009B157C /* LOTShapeCircle.m in Sources */, 84FE130D1E4C1553009B157C /* LOTShapeFill.m in Sources */, + 62BFC3001F14298D0068A342 /* LOTValueInterpolator.m in Sources */, 84FE130E1E4C1553009B157C /* LOTShapeGroup.m in Sources */, + 62BFC2FB1F14298D0068A342 /* LOTRenderNode.m in Sources */, + 6274CFB31F17E99600E05049 /* LOTRectInterpolator.m in Sources */, 84FE130F1E4C1553009B157C /* LOTShapePath.m in Sources */, + 622F76591F2AC70400269858 /* LOTGradientFillRender.m in Sources */, 84FE13101E4C1553009B157C /* LOTShapeRectangle.m in Sources */, 84FE13111E4C1553009B157C /* LOTShapeStroke.m in Sources */, 84FE13121E4C1553009B157C /* LOTShapeTransform.m in Sources */, 84FE13131E4C1553009B157C /* LOTShapeTrimPath.m in Sources */, 84FE13141E4C1553009B157C /* LOTAnimationTransitionController.m in Sources */, 84FE13151E4C1553009B157C /* LOTAnimationView.m in Sources */, + 6274D0111F1D6CE200E05049 /* LOTStrokeRenderer.m in Sources */, + 6274CFA41F17E94C00E05049 /* LOTPathInterpolator.m in Sources */, + 6274D0251F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -840,14 +1283,20 @@ files = ( 481A4AB41E4A7885003CF62B /* LOTShapeCircle.m in Sources */, 481A4A6E1E4A7885003CF62B /* LOTMaskLayer.m in Sources */, + 621A4F731F2275980065E14F /* LOTTrimPathNode.m in Sources */, 481A4A941E4A7885003CF62B /* LOTAnimationCache.m in Sources */, 481A4AD01E4A7885003CF62B /* LOTShapeTrimPath.m in Sources */, 481A4AA61E4A7885003CF62B /* LOTComposition.m in Sources */, + 62BFC2EB1F14298D0068A342 /* LOTKeyframe.m in Sources */, 4883E4F31E5FA5EE00027E57 /* LOTAssetGroup.m in Sources */, + 6274CF9C1F17E92F00E05049 /* LOTSizeInterpolator.m in Sources */, 481A4AC41E4A7885003CF62B /* LOTShapeRectangle.m in Sources */, 481A4ACC1E4A7885003CF62B /* LOTShapeTransform.m in Sources */, 481A4AB81E4A7885003CF62B /* LOTShapeFill.m in Sources */, 481A4AC01E4A7885003CF62B /* LOTShapePath.m in Sources */, + 6274D0101F1D6CE200E05049 /* LOTStrokeRenderer.m in Sources */, + 62BFC3061F1449380068A342 /* LOTBezierData.m in Sources */, + 62C9EA271F1EB49000DE7D07 /* LOTCompositionContainer.m in Sources */, 481A4A721E4A7885003CF62B /* LOTRectShapeLayer.m in Sources */, 48183C9F1E54E20B0039F121 /* CGGeometry+LOTAdditions.m in Sources */, 481A4AAE1E4A7885003CF62B /* LOTMask.m in Sources */, @@ -855,27 +1304,52 @@ 481A4A5E1E4A7885003CF62B /* LOTAnimatableLayer.m in Sources */, 481A4A8A1E4A7885003CF62B /* LOTAnimatableScaleValue.m in Sources */, 481A4A861E4A7885003CF62B /* LOTAnimatablePointValue.m in Sources */, + 62C9EA461F1FDBF000DE7D07 /* LOTCircleAnimator.m in Sources */, 484EBA191E565AF700D4CAD9 /* LOTAsset.m in Sources */, + 622F76671F2BCA7700269858 /* LOTShapeRepeater.m in Sources */, 481A4A621E4A7885003CF62B /* LOTEllipseShapeLayer.m in Sources */, + 6274CF8E1F16F29200E05049 /* LOTPointInterpolator.m in Sources */, 484EBA281E57898D00D4CAD9 /* LOTLayerGroup.m in Sources */, 481A4A821E4A7885003CF62B /* LOTAnimatableNumberValue.m in Sources */, 481A4AE41E4A78A0003CF62B /* CADisplayLink.m in Sources */, + 62BFC2F51F14298D0068A342 /* LOTRenderGroup.m in Sources */, 481A4A981E4A7885003CF62B /* CAAnimationGroup+LOTAnimatableGroup.m in Sources */, 481A4A6A1E4A7885003CF62B /* LOTLayerView.m in Sources */, 481A4AD41E4A7885003CF62B /* LOTAnimationView.m in Sources */, + 6274CFB21F17E99600E05049 /* LOTRectInterpolator.m in Sources */, + 622F762F1F2A8CBA00269858 /* LOTShapeStar.m in Sources */, + 6274CFAB1F17E98200E05049 /* LOTColorInterpolator.m in Sources */, + 6274CFA31F17E94C00E05049 /* LOTPathInterpolator.m in Sources */, 481A4AC81E4A7885003CF62B /* LOTShapeStroke.m in Sources */, + 6274CEBC1F157DCD00E05049 /* LOTNumberInterpolator.m in Sources */, 481A4AA21E4A7885003CF62B /* UIColor+Expanded.m in Sources */, + 622F766E1F2BCE1300269858 /* LOTRepeaterRenderer.m in Sources */, + 622F75EC1F29508D00269858 /* LOTShapeGradientFill.m in Sources */, + 6201FAE91F200B4A00A047C9 /* LOTMaskContainer.m in Sources */, + 62BFC2E61F14298D0068A342 /* LOTFillRenderer.m in Sources */, 481A4A761E4A7885003CF62B /* LOTShapeLayerView.m in Sources */, + 62BFC2E11F14298D0068A342 /* LOTAnimatorNode.m in Sources */, 481A4ABC1E4A7885003CF62B /* LOTShapeGroup.m in Sources */, 481A4AE91E4A78A0003CF62B /* NSValue+Compat.m in Sources */, 481A4AE61E4A78A0003CF62B /* CALayer+Compat.m in Sources */, + 622F76511F2AC1BF00269858 /* LOTArrayInterpolator.m in Sources */, 481A4AEB1E4A78A0003CF62B /* UIBezierPath.m in Sources */, + 62C9EA4D1F1FE6C800DE7D07 /* LOTRoundedRectAnimator.m in Sources */, 4883E4EA1E5FA59200027E57 /* LOTCompositionLayer.m in Sources */, + 621A4F6B1F216DC60065E14F /* LOTBezierPath.m in Sources */, + 622F763F1F2A92FC00269858 /* LOTPolygonAnimator.m in Sources */, 481A4A7A1E4A7885003CF62B /* LOTAnimatableBoundsValue.m in Sources */, 481A4A7E1E4A7885003CF62B /* LOTAnimatableColorValue.m in Sources */, + 62BFC2F01F14298D0068A342 /* LOTPathAnimator.m in Sources */, + 622F76581F2AC70400269858 /* LOTGradientFillRender.m in Sources */, + 622F76381F2A91CA00269858 /* LOTPolystarAnimator.m in Sources */, + 6274D01D1F1E82D000E05049 /* LOTLayerContainer.m in Sources */, 481A4AAA1E4A7885003CF62B /* LOTLayer.m in Sources */, 489F8E151E4CF3BE00F2DEB7 /* LOTStrokeShapeLayer.m in Sources */, + 6274D0241F1E830E00E05049 /* LOTTransformInterpolator.m in Sources */, 481A4AED1E4A78A0003CF62B /* UIColor.m in Sources */, + 62BFC2FA1F14298D0068A342 /* LOTRenderNode.m in Sources */, + 62BFC2FF1F14298D0068A342 /* LOTValueInterpolator.m in Sources */, 481A4A661E4A7885003CF62B /* LOTGroupLayerView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h new file mode 100644 index 0000000000..9740ecacdd --- /dev/null +++ b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.h @@ -0,0 +1,19 @@ +// +// 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)initWithModel:(LOTLayer *)layer + inLayerGroup:(LOTLayerGroup *)layerGroup + withLayerGroup:(LOTLayerGroup *)childLayerGroup + withAssestGroup:(LOTAssetGroup *)assetGroup; + +@end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m new file mode 100644 index 0000000000..848f36b4e0 --- /dev/null +++ b/lottie-ios/Classes/AnimatableLayers/LOTCompositionContainer.m @@ -0,0 +1,98 @@ +// +// 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" + +@implementation LOTCompositionContainer { + NSArray *_childLayers; + NSNumber *_frameOffset; + CALayer *DEBUG_Center; +} + +- (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) { + _frameOffset = layer.startFrame; + } else { + _frameOffset = @0; + } + [self intializeWithChildGroup:childLayerGroup withAssetGroup:assetGroup]; + } + return self; +} + +- (void)intializeWithChildGroup:(LOTLayerGroup *)childGroup + withAssetGroup:(LOTAssetGroup *)assetGroup { + 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]; + } + _childLayers = children; +} + +- (void)displayWithFrame:(NSNumber *)frame { + if (ENABLE_DEBUG_LOGGING) NSLog(@"-------------------- Composition Displaying Frame %@ --------------------", frame); + [super displayWithFrame:frame]; + NSNumber *childFrame = @(frame.floatValue - _frameOffset.floatValue); + for (LOTLayerContainer *child in _childLayers) { + [child displayWithFrame:childFrame]; + } + 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; + } +} + +@end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.h b/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.h index 9855190948..37267f01b8 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.h +++ b/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.h @@ -14,6 +14,7 @@ @interface LOTCompositionLayer : CALayer +/// DEPRECATED - (instancetype)initWithLayerGroup:(LOTLayerGroup *)layerGroup withAssetGroup:(LOTAssetGroup *)assetGroup withBounds:(CGRect)bounds @@ -24,4 +25,6 @@ - (void)layoutCustomChildLayers; +@property (nonatomic) NSNumber *currentFrame; + @end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.m b/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.m index db52bd303f..ab983ef835 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.m +++ b/lottie-ios/Classes/AnimatableLayers/LOTCompositionLayer.m @@ -12,6 +12,8 @@ #import "LOTAnimationView_Internal.h" #import "LOTAsset.h" #import "LOTAssetGroup.h" +#import "LOTHelpers.h" +#import "LOTLayerContainer.h" @interface LOTCustomChild : NSObject @@ -34,7 +36,7 @@ @implementation LOTCompositionLayer { - (instancetype)initWithLayerGroup:(LOTLayerGroup *)layerGroup withAssetGroup:(LOTAssetGroup *)assetGroup withBounds:(CGRect)bounds - inBundle:(NSBundle *)bundle{ + inBundle:(NSBundle *)bundle { self = [super init]; if (self) { self.masksToBounds = YES; @@ -46,8 +48,7 @@ - (instancetype)initWithLayerGroup:(LOTLayerGroup *)layerGroup - (void)_setupWithLayerGroup:(LOTLayerGroup *)layerGroup withAssetGroup:(LOTAssetGroup *)assetGroup withBounds:(CGRect)bounds - inBundle:(NSBundle *)bundle - { + inBundle:(NSBundle *)bundle { if (_customLayers) { for (LOTCustomChild *child in _customLayers) { [child.childView.layer removeFromSuperlayer]; @@ -156,4 +157,6 @@ - (void)addSublayer:(LOTView *)view [self layoutCustomChildLayers]; } + + @end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h new file mode 100644 index 0000000000..4061f55540 --- /dev/null +++ b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.h @@ -0,0 +1,23 @@ +// +// 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" + +@interface LOTLayerContainer : CALayer + +- (instancetype)initWithModel:(LOTLayer *)layer + inLayerGroup:(LOTLayerGroup *)layerGroup; + +@property (nonatomic) NSNumber *currentFrame; +@property (nonatomic, assign) CGRect viewportBounds; +@property (nonatomic, readonly) CALayer *wrapperLayer; +- (void)displayWithFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m new file mode 100644 index 0000000000..285bff29db --- /dev/null +++ b/lottie-ios/Classes/AnimatableLayers/LOTLayerContainer.m @@ -0,0 +1,211 @@ +// +// 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 "LOTAnimatableNumberValue.h" +#import "CGGeometry+LOTAdditions.h" +#import "LOTRenderGroup.h" +#import "LOTHelpers.h" +#import "LOTMaskContainer.h" +#import "LOTAsset.h" + +@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]; + [self commonInitializeWith:layer inLayerGroup:layerGroup]; + } + return self; +} + +- (void)commonInitializeWith:(LOTLayer *)layer + inLayerGroup:(LOTLayerGroup *)layerGroup { + if (layer == nil) { + return; + } + + 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]; + _transformInterpolator = [LOTTransformInterpolator transformForLayer:layer]; + if (layer.parentID) { + 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.keyframeGroup.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; + } +} + +- (void)buildContents:(NSArray *)contents { + _contentsGroup = [[LOTRenderGroup alloc] initWithInputNode:nil contents:contents]; + [_wrapperLayer addSublayer:_contentsGroup.containerLayer]; +} + +#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + +- (void)_setImageForAsset:(LOTAsset *)asset { + if (asset.imageName) { + UIImage *image; + 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]; + image = [UIImage imageWithContentsOfFile:imagePath]; + }else{ + NSArray *components = [asset.imageName componentsSeparatedByString:@"."]; + image = [UIImage imageNamed:components.firstObject 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 (lasset.imageName) { + NSArray *components = [asset.imageName componentsSeparatedByString:@"."]; + NSImage *image = [NSImage imageNamed:components.firstObject]; + if (image) { + NSWindow *window = [NSApp mainWindow]; + CGFloat desiredScaleFactor = [window backingScaleFactor]; + CGFloat actualScaleFactor = [image recommendedLayerContentsScale:desiredScaleFactor]; + id layerContents = [image layerContentsForContentsScale:actualScaleFactor]; + _childSolid.contents = layerContents; + + } + } + +} + +#endif + +// MARK - Animation + ++ (BOOL)needsDisplayForKey:(NSString *)key { + BOOL needsDisplay = [super needsDisplayForKey:key]; + + if ([key isEqualToString:@"currentFrame"]) { + needsDisplay = YES; + } + + return needsDisplay; +} + +-(id)actionForKey:(NSString *)event { + if([event isEqualToString:@"currentFrame"]) { + CABasicAnimation *theAnimation = [CABasicAnimation + animationWithKeyPath:event]; + theAnimation.fromValue = [[self presentationLayer] valueForKey:event]; + return theAnimation; + } + return [super actionForKey:event]; +} + +- (void)display { + LOTLayerContainer *presentation = (LOTLayerContainer *)self.presentationLayer; + if (presentation == nil) { + presentation = self; + } + [self displayWithFrame:presentation.currentFrame]; +} + +- (void)displayWithFrame:(NSNumber *)frame { + if (ENABLE_DEBUG_LOGGING) NSLog(@"View %@ Displaying Frame %@", self, frame); + 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:frame]) { + self.opacity = [_opacityInterpolator floatValueForFrame:frame]; + } + if (_transformInterpolator && [_transformInterpolator hasUpdateForFrame:frame]) { + _wrapperLayer.transform = [_transformInterpolator transformForFrame:frame]; + } + [_contentsGroup updateWithFrame:frame]; + _maskLayer.currentFrame = frame; +} + +- (void)setViewportBounds:(CGRect)viewportBounds { + _viewportBounds = viewportBounds; + if (_maskLayer) { + CGPoint center = LOT_RectGetCenterPoint(viewportBounds); + viewportBounds.origin = CGPointMake(-center.x, -center.y); + _maskLayer.bounds = viewportBounds; + } +} + +@end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTLayerView.h b/lottie-ios/Classes/AnimatableLayers/LOTLayerView.h index d66c67118c..adaa1f9a7b 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTLayerView.h +++ b/lottie-ios/Classes/AnimatableLayers/LOTLayerView.h @@ -18,6 +18,7 @@ - (void)LOT_addChildLayer:(CALayer *)childLayer; +@property (nonatomic, strong) NSNumber *currentFrame; @property (nonatomic, readonly) LOTLayer *layerModel; @property (nonatomic, assign) BOOL debugModeOn; diff --git a/lottie-ios/Classes/AnimatableLayers/LOTLayerView.m b/lottie-ios/Classes/AnimatableLayers/LOTLayerView.m index b7770d477f..9b259f214f 100644 --- a/lottie-ios/Classes/AnimatableLayers/LOTLayerView.m +++ b/lottie-ios/Classes/AnimatableLayers/LOTLayerView.m @@ -15,6 +15,9 @@ #import "LOTMaskLayer.h" #import "CGGeometry+LOTAdditions.h" +#import "LOTHelpers.h" +#import "LOTRenderGroup.h" + @interface LOTParentLayer : LOTAnimatableLayer - (instancetype)initWithParentModel:(LOTLayer *)parent; @@ -93,6 +96,8 @@ @implementation LOTLayerView { LOTMaskLayer *_maskLayer; CALayer *_childSolid; NSBundle *_bundle; + + LOTRenderGroup *_childGroup; } - (instancetype)initWithModel:(LOTLayer *)model inLayerGroup:(LOTLayerGroup *)layerGroup{ @@ -169,6 +174,14 @@ - (void)_setupViewFromModelWithLayerGroup:(LOTLayerGroup *)layersGroup { _childContainerLayer.anchorPoint = _layerModel.anchor.initialPoint; _childContainerLayer.transform = _layerModel.scale.initialScale; _childContainerLayer.sublayerTransform = CATransform3DMakeRotation(_layerModel.rotation.initialValue.floatValue, 0, 0, 1); + + if (DEBUG_USE_NEW_RENDERER) { + _childGroup = [[LOTRenderGroup alloc] initWithInputNode:nil contents:_layerModel.shapes]; + [_childContainerLayer addSublayer:_childGroup.containerLayer]; + [_childGroup updateWithFrame:@0]; + return; + } + self.hidden = _layerModel.hasInAnimation; NSArray *groupItems = _layerModel.shapes; @@ -248,6 +261,12 @@ - (void)_setupViewFromModelWithLayerGroup:(LOTLayerGroup *)layersGroup { [self _buildAnimations]; } +- (void)setCurrentFrame:(NSNumber *)currentFrame { + _currentFrame = currentFrame; + NSLog(@"--------------------------------- Layer Update %@ ---------------------------------", currentFrame); + [_childGroup updateWithFrame:currentFrame]; +} + - (void)_buildAnimations { NSMutableDictionary *keypaths = [NSMutableDictionary dictionary]; if (_layerModel.opacity) { diff --git a/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.h b/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.h new file mode 100644 index 0000000000..75a50b2409 --- /dev/null +++ b/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)initWithMasks:(NSArray *)masks; + +@property (nonatomic, strong) NSNumber *currentFrame; + +@end diff --git a/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.m b/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.m new file mode 100644 index 0000000000..721326626e --- /dev/null +++ b/lottie-ios/Classes/AnimatableLayers/LOTMaskContainer.m @@ -0,0 +1,108 @@ +// +// LOTMaskContainer.m +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTMaskContainer.h" +#import "LOTAnimatableShapeValue.h" +#import "LOTAnimatableNumberValue.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.keyframeGroup.keyframes]; + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:maskNode.opacity.keyframeGroup.keyframes]; + _expansionInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:maskNode.expansion.keyframeGroup.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"; + } 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/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.h b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.h index 9a12deb6a6..5f4195423c 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.h +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.h @@ -9,11 +9,13 @@ #import #import #import "LOTAnimatableValue.h" +#import "LOTKeyframe.h" @interface LOTAnimatableBoundsValue : NSObject - (instancetype)initWithSizeValues:(NSDictionary *)sizeValue frameRate:(NSNumber *)frameRate; @property (nonatomic, readonly) CGRect initialBounds; +@property (nonatomic, readonly) LOTKeyframeGroup *keyframeGroup; @end diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.m b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.m index ec4fcf269d..77516259dd 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.m +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableBoundsValue.m @@ -8,6 +8,7 @@ #import "LOTPlatformCompat.h" #import "LOTAnimatableBoundsValue.h" +#import "LOTHelpers.h" @interface LOTAnimatableBoundsValue () @@ -29,6 +30,9 @@ - (instancetype)initWithSizeValues:(NSDictionary *)sizeValue frameRate:(NSNumber if (self) { _frameRate = frameRate; id value = sizeValue[@"k"]; + if (DEBUG_USE_NEW_RENDERER) { + _keyframeGroup = [[LOTKeyframeGroup alloc] initWithData:value]; + } if ([value isKindOfClass:[NSArray class]] && [[(NSArray *)value firstObject] isKindOfClass:[NSDictionary class]] && [(NSArray *)value firstObject][@"t"]) { diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.h b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.h index fcbf34f16f..39f5fcabb3 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.h +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.h @@ -10,11 +10,13 @@ #import #import "LOTAnimatableValue.h" #import "LOTPlatformCompat.h" +#import "LOTKeyframe.h" @interface LOTAnimatableColorValue : NSObject - (instancetype)initWithColorValues:(NSDictionary *)colorValues frameRate:(NSNumber *)frameRate; @property (nonatomic, readonly) UIColor *initialColor; +@property (nonatomic, readonly) LOTKeyframeGroup *keyframeGroup; @end diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.m b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.m index 86af896c64..ee635edf5e 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.m +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableColorValue.m @@ -7,6 +7,7 @@ // #import "LOTAnimatableColorValue.h" +#import "LOTHelpers.h" @interface LOTAnimatableColorValue () @@ -29,6 +30,9 @@ - (instancetype)initWithColorValues:(NSDictionary *)colorValues frameRate:(NSNum if (self) { _frameRate = frameRate; NSArray *value = colorValues[@"k"]; + if (DEBUG_USE_NEW_RENDERER) { + _keyframeGroup = [[LOTKeyframeGroup alloc] initWithData:value]; + } if ([value isKindOfClass:[NSArray class]] && [[(NSArray *)value firstObject] isKindOfClass:[NSDictionary class]] && [(NSArray *)value firstObject][@"t"]) { diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.h b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.h index 930d4227e6..820866da91 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.h +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.h @@ -9,6 +9,7 @@ #import #import #import "LOTAnimatableValue.h" +#import "LOTKeyframe.h" @interface LOTAnimatableNumberValue : NSObject @@ -21,5 +22,6 @@ - (void)remapValueWithBlock:(CGFloat (^)(CGFloat inValue))remapBlock; @property (nonatomic, readonly) NSNumber *initialValue; +@property (nonatomic, readonly) LOTKeyframeGroup *keyframeGroup; @end diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.m b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.m index 00a6fb7d7f..09268fa160 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.m +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableNumberValue.m @@ -29,6 +29,9 @@ - (instancetype)initWithNumberValues:(NSDictionary *)numberValues frameRate:(NSN if (self) { _frameRate = frameRate; id value = numberValues[@"k"]; + if (DEBUG_USE_NEW_RENDERER) { + _keyframeGroup = [[LOTKeyframeGroup alloc] initWithData:value]; + } if ([value isKindOfClass:[NSArray class]] && [[(NSArray *)value firstObject] isKindOfClass:[NSDictionary class]] && [(NSArray *)value firstObject][@"t"]) { @@ -46,7 +49,6 @@ - (instancetype)initWithNumberValues:(NSDictionary *)numberValues frameRate:(NSN } - (void)_buildAnimationForKeyframes:(NSArray *)keyframes { - NSMutableArray *keyTimes = [NSMutableArray array]; NSMutableArray *timingFunctions = [NSMutableArray array]; NSMutableArray *numberValues = [NSMutableArray array]; @@ -62,6 +64,7 @@ - (void)_buildAnimationForKeyframes:(NSArray *)keyframes { _duration = _durationFrames.floatValue / _frameRate.floatValue; _delay = _startFrame.floatValue / _frameRate.floatValue; + BOOL addStartValue = YES; BOOL addTimePadding = NO; NSNumber *outValue = nil; @@ -177,6 +180,7 @@ - (void)remapValuesFromMin:(NSNumber *)fromMin [self remapValueWithBlock:^CGFloat(CGFloat inValue) { return LOT_RemapValue(inValue, fromMin.floatValue, fromMax.floatValue, toMin.floatValue, toMax.floatValue); }]; + } - (void)remapValueWithBlock:(CGFloat (^)(CGFloat inValue))remapBlock { diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.h b/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.h index 621d6d10c9..bcef024a23 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.h +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.h @@ -9,6 +9,7 @@ #import #import #import "LOTAnimatableValue.h" +#import "LOTKeyframe.h" @interface LOTAnimatablePointValue : NSObject @@ -17,5 +18,6 @@ @property (nonatomic, readonly) CGPoint initialPoint; @property (nonatomic, assign) BOOL usePathAnimation; +@property (nonatomic, readonly) LOTKeyframeGroup *keyframeGroup; @end diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.m b/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.m index 8c3282ec40..1d64e0e93f 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.m +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatablePointValue.m @@ -8,7 +8,7 @@ #import "LOTPlatformCompat.h" #import "LOTAnimatablePointValue.h" -#import "CGGeometry+LOTAdditions.h" +#import "LOTHelpers.h" @interface LOTAnimatablePointValue () @@ -32,6 +32,9 @@ - (instancetype)initWithPointValues:(NSDictionary *)pointValues frameRate:(NSNum _usePathAnimation = YES; _frameRate = frameRate; NSArray *value = pointValues[@"k"]; + if (DEBUG_USE_NEW_RENDERER) { + _keyframeGroup = [[LOTKeyframeGroup alloc] initWithData:value]; + } if ([value isKindOfClass:[NSArray class]] && [[(NSArray *)value firstObject] isKindOfClass:[NSDictionary class]] && [(NSArray *)value firstObject][@"t"]) { @@ -39,6 +42,7 @@ - (instancetype)initWithPointValues:(NSDictionary *)pointValues frameRate:(NSNum [self _buildAnimationForKeyframes:value]; } else { //Single Value, no animation + _initialPoint = [self _pointFromValueArray:value]; } if (pointValues[@"x"]) { @@ -176,6 +180,9 @@ - (void)_buildAnimationForKeyframes:(NSArray *)keyframes { } - (void)remapPointsFromBounds:(CGRect)frombounds toBounds:(CGRect)toBounds { + if (DEBUG_USE_NEW_RENDERER) { + return; + } if (_pointKeyframes.count) { NSMutableArray *newValues = [NSMutableArray array]; for (NSValue *pointValue in _pointKeyframes) { diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.h b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.h index bc7f212768..a7f8fe3e0d 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.h +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.h @@ -8,11 +8,13 @@ #import #import "LOTAnimatableValue.h" +#import "LOTKeyframe.h" @interface LOTAnimatableScaleValue : NSObject - (instancetype)initWithScaleValues:(NSDictionary *)scaleValues frameRate:(NSNumber *)frameRate; @property (nonatomic, readonly) CATransform3D initialScale; +@property (nonatomic, readonly) LOTKeyframeGroup *keyframeGroup; @end diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.m b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.m index 0917d385b1..563a5e1162 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.m +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableScaleValue.m @@ -7,7 +7,7 @@ // #import "LOTAnimatableScaleValue.h" - +#import "LOTHelpers.h" @interface LOTAnimatableScaleValue () @property (nonatomic, readonly) NSArray *scaleKeyframes; @@ -29,6 +29,9 @@ - (instancetype)initWithScaleValues:(NSDictionary *)scaleValues frameRate:(NSNum if (self) { _frameRate = frameRate; id value = scaleValues[@"k"]; + if (DEBUG_USE_NEW_RENDERER) { + _keyframeGroup = [[LOTKeyframeGroup alloc] initWithData:value]; + } if ([value isKindOfClass:[NSArray class]] && [[(NSArray *)value firstObject] isKindOfClass:[NSDictionary class]] && [(NSArray *)value firstObject][@"t"]) { @@ -46,7 +49,6 @@ - (instancetype)initWithScaleValues:(NSDictionary *)scaleValues frameRate:(NSNum } - (void)_buildAnimationForKeyframes:(NSArray *)keyframes { - NSMutableArray *keyTimes = [NSMutableArray array]; NSMutableArray *timingFunctions = [NSMutableArray array]; NSMutableArray *scaleValues = [NSMutableArray array]; @@ -144,7 +146,7 @@ - (void)_buildAnimationForKeyframes:(NSArray *)keyframes { - (CATransform3D)_xformForValueArray:(NSArray *)value { if (value.count >=2) { - return CATransform3DMakeScale([value[0] floatValue] / 100.f, [value[1] floatValue] / 100.f, 1); + return CATransform3DMakeScale([(NSNumber *)value[0] floatValue] / 100.f, [(NSNumber *)value[1] floatValue] / 100.f, 1); } return CATransform3DIdentity; } diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.h b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.h index 9cda11534a..06528532c3 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.h +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.h @@ -9,11 +9,13 @@ #import #import "LOTPlatformCompat.h" #import "LOTAnimatableValue.h" +#import "LOTKeyframe.h" @interface LOTAnimatableShapeValue : NSObject - (instancetype)initWithShapeValues:(NSDictionary *)shapeValues frameRate:(NSNumber *)frameRate closed:(BOOL)closed; @property (nonatomic, readonly) UIBezierPath *initialShape; +@property (nonatomic, readonly) LOTKeyframeGroup *keyframeGroup; @end diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.m b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.m index 528b5cc2a5..96778b0f49 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.m +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableShapeValue.m @@ -8,6 +8,8 @@ #import "LOTAnimatableShapeValue.h" #import "CGGeometry+LOTAdditions.h" +#import "LOTHelpers.h" + @interface LOTAnimatableShapeValue () @property (nonatomic, readonly) NSArray *shapeKeyframes; @@ -28,6 +30,9 @@ - (instancetype)initWithShapeValues:(NSDictionary *)shapeValues frameRate:(NSNum if (self) { _frameRate = frameRate; id value = shapeValues[@"k"]; + if (DEBUG_USE_NEW_RENDERER) { + _keyframeGroup = [[LOTKeyframeGroup alloc] initWithData:value]; + } if ([value isKindOfClass:[NSArray class]] && [[(NSArray *)value firstObject] isKindOfClass:[NSDictionary class]] && [(NSArray *)value firstObject][@"t"]) { @@ -256,7 +261,7 @@ - (CGPoint)_vertexAtIndex:(NSInteger)idx inArray:(NSArray *)points { [pointArray.firstObject isKindOfClass:[NSNumber class]]), @"Lottie: Point Data Malformed"); - return CGPointMake([pointArray[0] floatValue], [pointArray[1] floatValue]); + return CGPointMake([(NSNumber *)pointArray[0] floatValue], [(NSNumber *)pointArray[1] floatValue]); } - (NSNumber *)_numberValueFromObject:(id)valueObject { diff --git a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableValue.h b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableValue.h index 880cbf86b9..3151d75593 100644 --- a/lottie-ios/Classes/AnimatableProperties/LOTAnimatableValue.h +++ b/lottie-ios/Classes/AnimatableProperties/LOTAnimatableValue.h @@ -10,7 +10,8 @@ #import @protocol LOTAnimatableValue - +// BW TODO Make this a class and remove all of the various animatable classes. +// The new LOTKeyframe and render system does away with all of the extra classes - (CAKeyframeAnimation *)animationForKeyPath:(NSString *)keypath; - (BOOL)hasAnimation; diff --git a/lottie-ios/Classes/AnimatableProperties/LOTBezierData.h b/lottie-ios/Classes/AnimatableProperties/LOTBezierData.h new file mode 100644 index 0000000000..10441fc1bb --- /dev/null +++ b/lottie-ios/Classes/AnimatableProperties/LOTBezierData.h @@ -0,0 +1,23 @@ +// +// LOTBezierData.h +// Lottie +// +// Created by brandon_withrow on 7/10/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import + +@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 diff --git a/lottie-ios/Classes/AnimatableProperties/LOTBezierData.m b/lottie-ios/Classes/AnimatableProperties/LOTBezierData.m new file mode 100644 index 0000000000..b33e32b0f4 --- /dev/null +++ b/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/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h b/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h new file mode 100644 index 0000000000..bce938a110 --- /dev/null +++ b/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.h @@ -0,0 +1,47 @@ +// +// LOTKeyframe.h +// Pods +// +// Created by brandon_withrow on 7/10/17. +// +// + +#import +#import +#import "LOTPlatformCompat.h" +#import "LOTBezierData.h" + +// TODO Move to models + +@interface LOTKeyframe : NSObject + +- (instancetype)initWithKeyframe:(NSDictionary *)keyframe; +- (instancetype)initWithValue:(id)value; +- (void)remapValueWithBlock:(CGFloat (^)(CGFloat inValue))remapBlock; + +@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) CGRect rectValue; +@property (nonatomic, readonly) UIColor *colorValue; +@property (nonatomic, readonly) 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 diff --git a/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m b/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m new file mode 100644 index 0000000000..68e0552799 --- /dev/null +++ b/lottie-ios/Classes/AnimatableProperties/LOTKeyframe.m @@ -0,0 +1,216 @@ +// +// 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; +} + +- (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)); + _rectValue = CGRectMake(0, 0, _sizeValue.width, _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); + _rectValue = CGRectMake(0, 0, _sizeValue.width, _sizeValue.height); + } + 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) { + [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/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h b/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h index 4b6fc82a91..cf3ed4e048 100644 --- a/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h +++ b/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.h @@ -1,5 +1,6 @@ #import "LOTPlatformCompat.h" + #import #import #import @@ -87,3 +88,16 @@ CATransform3D LOT_CATransform3DSlerpToTransform(CATransform3D fromXorm, CATransf 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_CubicBezeirInterpolate(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/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m b/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m index 47c1e06283..42b7255eb2 100644 --- a/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m +++ b/lottie-ios/Classes/Extensions/CGGeometry+LOTAdditions.m @@ -397,3 +397,131 @@ CGPoint LOT_PointByLerpingPoints(CGPoint point1, CGPoint point2, CGFloat value) } 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_CubicBezeirInterpolate(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; + + for (int i = 0; i < iterations; ++i) { + float s = i * (1.0 / iterations); + float t = s + (1.0 / iterations); + + CGPoint p = LOT_PointInCubicCurve(fromPoint, controlPoint1, controlPoint2, toPoint, s); + CGPoint q = LOT_PointInCubicCurve(fromPoint, controlPoint1, controlPoint2, toPoint, t); + + length += LOT_PointDistanceFromPoint(p, q); + } + return length; +} + +CGFloat LOT_CubicLength(CGPoint fromPoint, CGPoint toPoint, CGPoint controlPoint1, CGPoint controlPoint2) { + return LOT_CubicLengthWithPrecision(fromPoint, toPoint, controlPoint1, controlPoint2, 20); +} + + diff --git a/lottie-ios/Classes/Extensions/LOTBezierPath.h b/lottie-ios/Classes/Extensions/LOTBezierPath.h new file mode 100644 index 0000000000..568cda68f6 --- /dev/null +++ b/lottie-ios/Classes/Extensions/LOTBezierPath.h @@ -0,0 +1,50 @@ +// +// LOTBezierPath.h +// Lottie +// +// Created by brandon_withrow on 7/20/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPlatformCompat.h" + +@interface LOTBezierPath : NSObject + ++ (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)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase; +- (void)getLineDash:(CGFloat *)pattern count:(NSInteger *)count phase:(CGFloat *)phase; +- (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 diff --git a/lottie-ios/Classes/Extensions/LOTBezierPath.m b/lottie-ios/Classes/Extensions/LOTBezierPath.m new file mode 100644 index 0000000000..54659b4f54 --- /dev/null +++ b/lottie-ios/Classes/Extensions/LOTBezierPath.m @@ -0,0 +1,446 @@ +// +// 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; + +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)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; + + 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); + } + + [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]; +} + +- (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)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 { + 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) { + break; + } else { + currentStartLength = fromLength; + currentEndLength = totalLength; + } + } + } + currentPoint = subpath->endPoint; + subpathBeginningLength = subpathEndLength; + + LOT_Subpath *nextNode = subpath->nextSubpath; + subpath->nextSubpath = NULL; + free(subpath); + subpath = nextNode; + } +} + +@end diff --git a/lottie-ios/Classes/Extensions/LOTHelpers.h b/lottie-ios/Classes/Extensions/LOTHelpers.h index b89539d044..2e1f902f2a 100644 --- a/lottie-ios/Classes/Extensions/LOTHelpers.h +++ b/lottie-ios/Classes/Extensions/LOTHelpers.h @@ -12,4 +12,44 @@ #import "UIColor+Expanded.h" #import "CGGeometry+LOTAdditions.h" +#define DEBUG_USE_NEW_RENDERER YES +#define ENABLE_DEBUG_LOGGING NO +#define ENABLE_DEBUG_SHAPES NO + #endif /* LOTHelpers_h */ + +// TODO Feature Phase +/* + - Trim Path individually + - Cache update + - Preload animation + - Image bundle support + - Image Cache Support + + PASS on LOTAnimationView + - Completion Block Support + - Proper Playing looping seeking + - Reverse, autoreverse + - Add sublayer support + + - Play to Keyframe Point + - Color change + - Arbitrary keyframe change + */ + +/* + - Check perfomance vs old renderer + - Check if the bounds value is still used + */ + +// TODO Cleanup Phase +/* + - Check all variable names, proper underscore + - Remove Animatable Values + - Remove animatable layers + - remove framerate and compbounds passing around + - Check nullability + - Check all BWs + - Check MacOS Compat + +*/ diff --git a/lottie-ios/Classes/Models/LOTAsset.h b/lottie-ios/Classes/Models/LOTAsset.h index e7a798cd04..de5e21eb03 100644 --- a/lottie-ios/Classes/Models/LOTAsset.h +++ b/lottie-ios/Classes/Models/LOTAsset.h @@ -20,7 +20,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithJSON:(NSDictionary *)jsonDictionary withBounds:(CGRect)bounds withFramerate:(NSNumber * _Nullable)framerate - withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup; + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withAssetBundle:(NSBundle *_Nonnull)bundle; @property (nonatomic, readonly, nullable) NSString *referenceID; @property (nonatomic, readonly, nullable) NSNumber *assetWidth; @@ -32,6 +33,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly, nullable) LOTLayerGroup *layerGroup; @property (nonatomic, readwrite) NSString *rootDirectory; +@property (nonatomic, readonly) NSBundle *assetBundle; @end NS_ASSUME_NONNULL_END diff --git a/lottie-ios/Classes/Models/LOTAsset.m b/lottie-ios/Classes/Models/LOTAsset.m index e5713294af..6f43f2d290 100644 --- a/lottie-ios/Classes/Models/LOTAsset.m +++ b/lottie-ios/Classes/Models/LOTAsset.m @@ -15,10 +15,12 @@ @implementation LOTAsset - (instancetype)initWithJSON:(NSDictionary *)jsonDictionary withBounds:(CGRect)bounds - withFramerate:(NSNumber *)framerate - withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup{ + withFramerate:(NSNumber * _Nullable)framerate + withAssetGroup:(LOTAssetGroup * _Nullable)assetGroup + withAssetBundle:(NSBundle *_Nonnull)bundle { self = [super init]; if (self) { + _assetBundle = bundle; [self _mapFromJSON:jsonDictionary withBounds:bounds withFramerate:framerate diff --git a/lottie-ios/Classes/Models/LOTAssetGroup.h b/lottie-ios/Classes/Models/LOTAssetGroup.h index f28df221a1..ab09a22eb7 100644 --- a/lottie-ios/Classes/Models/LOTAssetGroup.h +++ b/lottie-ios/Classes/Models/LOTAssetGroup.h @@ -13,8 +13,10 @@ @class LOTLayerGroup; @interface LOTAssetGroup : NSObject @property (nonatomic, readwrite) NSString * _Nullable rootDirectory; +@property (nonatomic, readonly, nullable) NSBundle *assetBundle; -- (instancetype _Nonnull)initWithJSON:(NSArray * _Nonnull)jsonArray; +- (instancetype _Nonnull)initWithJSON:(NSArray * _Nonnull)jsonArray + withAssetBundle:(NSBundle *_Nullable)bundle; - (void)buildAssetNamed:(NSString * _Nonnull)refID withBounds:(CGRect)bounds diff --git a/lottie-ios/Classes/Models/LOTAssetGroup.m b/lottie-ios/Classes/Models/LOTAssetGroup.m index c1605846cb..6e41e7b5a9 100644 --- a/lottie-ios/Classes/Models/LOTAssetGroup.m +++ b/lottie-ios/Classes/Models/LOTAssetGroup.m @@ -14,9 +14,11 @@ @implementation LOTAssetGroup { NSDictionary *_assetJSONMap; } -- (instancetype)initWithJSON:(NSArray *)jsonArray { +- (instancetype _Nonnull)initWithJSON:(NSArray * _Nonnull)jsonArray + withAssetBundle:(NSBundle *_Nullable)bundle { self = [super init]; if (self) { + _assetBundle = bundle; _assetMap = [NSMutableDictionary dictionary]; NSMutableDictionary *assetJSONMap = [NSMutableDictionary dictionary]; for (NSDictionary *assetDictionary in jsonArray) { @@ -43,7 +45,8 @@ - (void)buildAssetNamed:(NSString *)refID LOTAsset *asset = [[LOTAsset alloc] initWithJSON:assetDictionary withBounds:bounds withFramerate:framerate - withAssetGroup:self]; + withAssetGroup:self + withAssetBundle:_assetBundle]; _assetMap[refID] = asset; } } diff --git a/lottie-ios/Classes/Models/LOTComposition.h b/lottie-ios/Classes/Models/LOTComposition.h index 4dc3a88a47..4520553ab3 100644 --- a/lottie-ios/Classes/Models/LOTComposition.h +++ b/lottie-ios/Classes/Models/LOTComposition.h @@ -15,7 +15,8 @@ @interface LOTComposition : NSObject -- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary; +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary + withAssetBundle:(NSBundle *)bundle; @property (nonatomic, readonly) CGRect compBounds; @property (nonatomic, readonly) NSNumber *startFrame; @@ -25,5 +26,6 @@ @property (nonatomic, readonly) LOTLayerGroup *layerGroup; @property (nonatomic, readonly) LOTAssetGroup *assetGroup; @property (nonatomic, readwrite) NSString *rootDirectory; +@property (nonatomic, readonly) NSBundle *assetBundle; @end diff --git a/lottie-ios/Classes/Models/LOTComposition.m b/lottie-ios/Classes/Models/LOTComposition.m index 2dd83f84e4..c6654bf985 100644 --- a/lottie-ios/Classes/Models/LOTComposition.m +++ b/lottie-ios/Classes/Models/LOTComposition.m @@ -13,15 +13,17 @@ @implementation LOTComposition -- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary { +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary + withAssetBundle:(NSBundle *)bundle { self = [super init]; if (self) { - [self _mapFromJSON:jsonDictionary]; + [self _mapFromJSON:jsonDictionary withAssetBundle:bundle]; } return self; } -- (void)_mapFromJSON:(NSDictionary *)jsonDictionary { +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary + withAssetBundle:(NSBundle *)bundle { NSNumber *width = jsonDictionary[@"w"]; NSNumber *height = jsonDictionary[@"h"]; if (width && height) { @@ -41,7 +43,7 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary { NSArray *assetArray = jsonDictionary[@"assets"]; if (assetArray.count) { - _assetGroup = [[LOTAssetGroup alloc] initWithJSON:assetArray]; + _assetGroup = [[LOTAssetGroup alloc] initWithJSON:assetArray withAssetBundle:bundle]; } NSArray *layersJSON = jsonDictionary[@"layers"]; @@ -55,8 +57,10 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary { [_assetGroup finalizeInitialization]; } -- (void)setRootDirectory:(NSString *)rootDirectory{ + +- (void)setRootDirectory:(NSString *)rootDirectory { _rootDirectory = rootDirectory; self.assetGroup.rootDirectory = rootDirectory; } + @end diff --git a/lottie-ios/Classes/Models/LOTLayer.h b/lottie-ios/Classes/Models/LOTLayer.h index d0570bd513..24b8fafe02 100644 --- a/lottie-ios/Classes/Models/LOTLayer.h +++ b/lottie-ios/Classes/Models/LOTLayer.h @@ -46,6 +46,7 @@ typedef enum : NSInteger { @property (nonatomic, readonly) NSNumber *layerID; @property (nonatomic, readonly) LOTLayerType layerType; @property (nonatomic, readonly) NSNumber *parentID; +@property (nonatomic, readonly) NSNumber *startFrame; @property (nonatomic, readonly) NSNumber *inFrame; @property (nonatomic, readonly) NSNumber *outFrame; @property (nonatomic, readonly) CGRect layerBounds; diff --git a/lottie-ios/Classes/Models/LOTLayer.m b/lottie-ios/Classes/Models/LOTLayer.m index b843f0001f..380f2814e5 100644 --- a/lottie-ios/Classes/Models/LOTLayer.m +++ b/lottie-ios/Classes/Models/LOTLayer.m @@ -53,6 +53,9 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary _parentID = [jsonDictionary[@"parent"] copy]; + if (jsonDictionary[@"st"]) { + _startFrame = [jsonDictionary[@"st"] copy]; + } _inFrame = [jsonDictionary[@"ip"] copy]; _outFrame = [jsonDictionary[@"op"] copy]; _framerate = framerate; @@ -88,6 +91,9 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary if (opacity) { _opacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:opacity frameRate:_framerate]; [_opacity remapValuesFromMin:@0 fromMax:@100 toMin:@0 toMax:@1]; + [_opacity.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; } NSDictionary *rotation = ks[@"r"]; @@ -99,6 +105,9 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary [_rotation remapValueWithBlock:^CGFloat(CGFloat inValue) { return LOT_DegreesToRadians(inValue); }]; + [_rotation.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_DegreesToRadians(inValue); + }]; } NSDictionary *position = ks[@"p"]; @@ -120,6 +129,9 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary NSDictionary *scale = ks[@"s"]; if (scale) { _scale = [[LOTAnimatableScaleValue alloc] initWithScaleValues:scale frameRate:_framerate]; + [_scale.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; } _matteType = [jsonDictionary[@"tt"] integerValue]; diff --git a/lottie-ios/Classes/Models/LOTMask.h b/lottie-ios/Classes/Models/LOTMask.h index dd792dba8a..7ac40294d3 100644 --- a/lottie-ios/Classes/Models/LOTMask.h +++ b/lottie-ios/Classes/Models/LOTMask.h @@ -26,5 +26,5 @@ typedef enum : NSUInteger { @property (nonatomic, readonly) LOTMaskMode maskMode; @property (nonatomic, readonly) LOTAnimatableShapeValue *maskPath; @property (nonatomic, readonly) LOTAnimatableNumberValue *opacity; - +@property (nonatomic, readonly) LOTAnimatableNumberValue *expansion; @end diff --git a/lottie-ios/Classes/Models/LOTMask.m b/lottie-ios/Classes/Models/LOTMask.m index 0000a49db8..e43bf0e7e5 100644 --- a/lottie-ios/Classes/Models/LOTMask.m +++ b/lottie-ios/Classes/Models/LOTMask.m @@ -9,6 +9,7 @@ #import "LOTMask.h" #import "LOTAnimatableShapeValue.h" #import "LOTAnimatableNumberValue.h" +#import "CGGeometry+LOTAdditions.h" @implementation LOTMask @@ -47,6 +48,14 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR if (opacity) { _opacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:opacity frameRate:frameRate]; [_opacity remapValuesFromMin:@0 fromMax:@100 toMin:@0 toMax:@1]; + [_opacity.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSDictionary *expansion = jsonDictionary[@"x"]; + if (expansion) { + _expansion = [[LOTAnimatableNumberValue alloc] initWithNumberValues:expansion frameRate:frameRate]; } } diff --git a/lottie-ios/Classes/Models/LOTModels.h b/lottie-ios/Classes/Models/LOTModels.h index 8d2ec9e1da..bda1271962 100644 --- a/lottie-ios/Classes/Models/LOTModels.h +++ b/lottie-ios/Classes/Models/LOTModels.h @@ -30,5 +30,6 @@ #import "LOTShapeTrimPath.h" #import "LOTLayerGroup.h" #import "LOTAsset.h" +#import "LOTShapeGradientFill.h" #endif /* LOTModels_h */ diff --git a/lottie-ios/Classes/Models/LOTShapeCircle.h b/lottie-ios/Classes/Models/LOTShapeCircle.h index 95809430cf..e45e4b5758 100644 --- a/lottie-ios/Classes/Models/LOTShapeCircle.h +++ b/lottie-ios/Classes/Models/LOTShapeCircle.h @@ -16,5 +16,6 @@ @property (nonatomic, readonly) LOTAnimatablePointValue *position; @property (nonatomic, readonly) LOTAnimatablePointValue *size; +@property (nonatomic, readonly) BOOL reversed; @end diff --git a/lottie-ios/Classes/Models/LOTShapeCircle.m b/lottie-ios/Classes/Models/LOTShapeCircle.m index 1cdeec9abe..1930399db9 100644 --- a/lottie-ios/Classes/Models/LOTShapeCircle.m +++ b/lottie-ios/Classes/Models/LOTShapeCircle.m @@ -32,6 +32,8 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR _size = [[LOTAnimatablePointValue alloc] initWithPointValues:size frameRate:frameRate]; _size.usePathAnimation = NO; } + NSNumber *reversed = jsonDictionary[@"d"]; + _reversed = (reversed.integerValue == 3); } @end diff --git a/lottie-ios/Classes/Models/LOTShapeFill.h b/lottie-ios/Classes/Models/LOTShapeFill.h index 12e2ac11e0..9388452361 100644 --- a/lottie-ios/Classes/Models/LOTShapeFill.h +++ b/lottie-ios/Classes/Models/LOTShapeFill.h @@ -18,5 +18,6 @@ @property (nonatomic, readonly) BOOL fillEnabled; @property (nonatomic, readonly) LOTAnimatableColorValue *color; @property (nonatomic, readonly) LOTAnimatableNumberValue *opacity; +@property (nonatomic, readonly) BOOL evenOddFillRule; @end diff --git a/lottie-ios/Classes/Models/LOTShapeFill.m b/lottie-ios/Classes/Models/LOTShapeFill.m index 54c8dfac80..b120b90b0c 100644 --- a/lottie-ios/Classes/Models/LOTShapeFill.m +++ b/lottie-ios/Classes/Models/LOTShapeFill.m @@ -9,6 +9,7 @@ #import "LOTShapeFill.h" #import "LOTAnimatableNumberValue.h" #import "LOTAnimatableColorValue.h" +#import "CGGeometry+LOTAdditions.h" @implementation LOTShapeFill @@ -30,6 +31,16 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR if (opacity) { _opacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:opacity frameRate:frameRate]; [_opacity remapValuesFromMin:@0 fromMax:@100 toMin:@0 toMax:@1]; + [_opacity.keyframeGroup 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"]; diff --git a/lottie-ios/Classes/Models/LOTShapeGradientFill.h b/lottie-ios/Classes/Models/LOTShapeGradientFill.h new file mode 100644 index 0000000000..106b66b94c --- /dev/null +++ b/lottie-ios/Classes/Models/LOTShapeGradientFill.h @@ -0,0 +1,24 @@ +// +// LOTShapeGradientFill.h +// Lottie +// +// Created by brandon_withrow on 7/26/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTAnimatablePointValue.h" +#import "LOTAnimatableNumberValue.h" + +@interface LOTShapeGradientFill : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate; + +@property (nonatomic, readonly) NSNumber *numberOfColors; +@property (nonatomic, readonly) LOTAnimatablePointValue *startPoint; +@property (nonatomic, readonly) LOTAnimatablePointValue *endPoint; +@property (nonatomic, readonly) LOTAnimatableNumberValue *gradient; +@property (nonatomic, readonly) LOTAnimatableNumberValue *opacity; +@property (nonatomic, readonly) BOOL evenOddFillRule; + +@end diff --git a/lottie-ios/Classes/Models/LOTShapeGradientFill.m b/lottie-ios/Classes/Models/LOTShapeGradientFill.m new file mode 100644 index 0000000000..79dafc9195 --- /dev/null +++ b/lottie-ios/Classes/Models/LOTShapeGradientFill.m @@ -0,0 +1,64 @@ +// +// LOTShapeGradientFill.m +// Lottie +// +// Created by brandon_withrow on 7/26/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTShapeGradientFill.h" +#import "LOTAnimatablePointValue.h" +#import "LOTAnimatableNumberValue.h" +#import "LOTAnimatableColorValue.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTShapeGradientFill + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary frameRate:frameRate]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate { + NSNumber *type = jsonDictionary[@"t"]; + if (type.integerValue != 1) { + NSLog(@"%s: Warning: Only Linear Gradients are supported.", __PRETTY_FUNCTION__); + } + + NSDictionary *start = jsonDictionary[@"s"]; + if (start) { + _startPoint = [[LOTAnimatablePointValue alloc] initWithPointValues:start frameRate:frameRate]; + } + + NSDictionary *end = jsonDictionary[@"e"]; + if (end) { + _endPoint = [[LOTAnimatablePointValue alloc] initWithPointValues:end frameRate:frameRate]; + } + + NSDictionary *gradient = jsonDictionary[@"g"]; + if (gradient) { + NSDictionary *unwrappedGradient = gradient[@"k"]; + _numberOfColors = gradient[@"p"]; + _gradient = [[LOTAnimatableNumberValue alloc] initWithNumberValues:unwrappedGradient frameRate:frameRate]; + } + + NSDictionary *opacity = jsonDictionary[@"o"]; + if (opacity) { + _opacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:opacity frameRate:frameRate]; + [_opacity remapValuesFromMin:@0 fromMax:@100 toMin:@0 toMax:@1]; + [_opacity.keyframeGroup 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/lottie-ios/Classes/Models/LOTShapeGroup.m b/lottie-ios/Classes/Models/LOTShapeGroup.m index 5dc312347b..2369a315c6 100644 --- a/lottie-ios/Classes/Models/LOTShapeGroup.m +++ b/lottie-ios/Classes/Models/LOTShapeGroup.m @@ -14,6 +14,9 @@ #import "LOTShapeTransform.h" #import "LOTShapeRectangle.h" #import "LOTShapeTrimPath.h" +#import "LOTShapeGradientFill.h" +#import "LOTShapeStar.h" +#import "LOTShapeRepeater.h" @implementation LOTShapeGroup @@ -63,18 +66,25 @@ + (id)shapeItemWithJSON:(NSDictionary *)itemJSON frameRate:(NSNumber *)frameRate } else if ([type isEqualToString:@"tm"]) { LOTShapeTrimPath *trim = [[LOTShapeTrimPath alloc] initWithJSON:itemJSON frameRate:frameRate]; 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 frameRate:frameRate]; + return gradientFill; + } else if ([type isEqualToString:@"sr"]) { + LOTShapeStar *star = [[LOTShapeStar alloc] initWithJSON:itemJSON frameRate:frameRate]; + 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 frameRate:frameRate]; + return repeater; } else { NSString *name = itemJSON[@"nm"]; - if ([type isEqualToString:@"gs"] /* gradient stroke */ || [type isEqualToString:@"gf"] /* gradient fill */) { - NSLog(@"%s: Warning: gradients are not supported", __PRETTY_FUNCTION__); - } else if ([type isEqualToString:@"sr"]) { - NSLog(@"%s: Warning: star is not supported. Convert to vector path? name: %@", __PRETTY_FUNCTION__, name); - } else if ([type isEqualToString:@"mm"]) { - NSLog(@"%s: Warning: merge shape is not supported. name: %@", __PRETTY_FUNCTION__, name); - } else { - NSLog(@"%s: Unsupported shape: %@ name: %@", __PRETTY_FUNCTION__, type, name); - } + NSLog(@"%s: Unsupported shape: %@ name: %@", __PRETTY_FUNCTION__, type, name); } + return nil; } diff --git a/lottie-ios/Classes/Models/LOTShapeRectangle.h b/lottie-ios/Classes/Models/LOTShapeRectangle.h index d5a8d6db4b..bf94d4527d 100644 --- a/lottie-ios/Classes/Models/LOTShapeRectangle.h +++ b/lottie-ios/Classes/Models/LOTShapeRectangle.h @@ -18,5 +18,6 @@ @property (nonatomic, readonly) LOTAnimatablePointValue *position; @property (nonatomic, readonly) LOTAnimatablePointValue *size; @property (nonatomic, readonly) LOTAnimatableNumberValue *cornerRadius; +@property (nonatomic, readonly) BOOL reversed; @end diff --git a/lottie-ios/Classes/Models/LOTShapeRectangle.m b/lottie-ios/Classes/Models/LOTShapeRectangle.m index aa4e735a4a..275a00c043 100644 --- a/lottie-ios/Classes/Models/LOTShapeRectangle.m +++ b/lottie-ios/Classes/Models/LOTShapeRectangle.m @@ -37,6 +37,8 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR if (size) { _size = [[LOTAnimatablePointValue alloc] initWithPointValues:size frameRate:frameRate]; } + NSNumber *reversed = jsonDictionary[@"d"]; + _reversed = (reversed.integerValue == 3); } @end diff --git a/lottie-ios/Classes/Models/LOTShapeRepeater.h b/lottie-ios/Classes/Models/LOTShapeRepeater.h new file mode 100644 index 0000000000..4b1fbc43b1 --- /dev/null +++ b/lottie-ios/Classes/Models/LOTShapeRepeater.h @@ -0,0 +1,28 @@ +// +// LOTShapeRepeater.h +// Lottie +// +// Created by brandon_withrow on 7/28/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTAnimatableNumberValue.h" +#import "LOTAnimatablePointValue.h" +#import "LOTAnimatableScaleValue.h" + +@interface LOTShapeRepeater : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary + frameRate:(NSNumber *)frameRate; + +@property (nonatomic, readonly) LOTAnimatableNumberValue *copies; +@property (nonatomic, readonly) LOTAnimatableNumberValue *offset; +@property (nonatomic, readonly) LOTAnimatablePointValue *anchorPoint; +@property (nonatomic, readonly) LOTAnimatableScaleValue *scale; +@property (nonatomic, readonly) LOTAnimatablePointValue *position; +@property (nonatomic, readonly) LOTAnimatableNumberValue *rotation; +@property (nonatomic, readonly) LOTAnimatableNumberValue *startOpacity; +@property (nonatomic, readonly) LOTAnimatableNumberValue *endOpacity; + +@end diff --git a/lottie-ios/Classes/Models/LOTShapeRepeater.m b/lottie-ios/Classes/Models/LOTShapeRepeater.m new file mode 100644 index 0000000000..9ca9f6d75d --- /dev/null +++ b/lottie-ios/Classes/Models/LOTShapeRepeater.m @@ -0,0 +1,81 @@ +// +// 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 + frameRate:(NSNumber *)frameRate { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary frameRate:frameRate]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate { + NSDictionary *copies = jsonDictionary[@"c"]; + if (copies) { + _copies = [[LOTAnimatableNumberValue alloc] initWithNumberValues:copies frameRate:frameRate]; + } + + NSDictionary *offset = jsonDictionary[@"o"]; + if (offset) { + _offset = [[LOTAnimatableNumberValue alloc] initWithNumberValues:offset frameRate:frameRate]; + } + + NSDictionary *transform = jsonDictionary[@"tr"]; + + NSDictionary *rotation = transform[@"r"]; + if (rotation) { + _rotation = [[LOTAnimatableNumberValue alloc] initWithNumberValues:rotation frameRate:frameRate]; + [_rotation.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_DegreesToRadians(inValue); + }]; + } + + NSDictionary *startOpacity = transform[@"so"]; + if (startOpacity) { + _startOpacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:startOpacity frameRate:frameRate]; + [_startOpacity.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSDictionary *endOpacity = transform[@"eo"]; + if (endOpacity) { + _endOpacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:endOpacity frameRate:frameRate]; + [_endOpacity.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + NSDictionary *anchorPoint = transform[@"a"]; + if (anchorPoint) { + _anchorPoint = [[LOTAnimatablePointValue alloc] initWithPointValues:anchorPoint frameRate:frameRate]; + } + + NSDictionary *position = transform[@"p"]; + if (position) { + _position = [[LOTAnimatablePointValue alloc] initWithPointValues:position frameRate:frameRate]; + } + + NSDictionary *scale = transform[@"s"]; + if (scale) { + _scale = [[LOTAnimatableScaleValue alloc] initWithScaleValues:scale frameRate:frameRate]; + [_scale.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; + } + + +} + +@end diff --git a/lottie-ios/Classes/Models/LOTShapeStar.h b/lottie-ios/Classes/Models/LOTShapeStar.h new file mode 100644 index 0000000000..f2a282c502 --- /dev/null +++ b/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 +@class LOTAnimatablePointValue; +@class LOTAnimatableNumberValue; + +typedef enum : NSUInteger { + LOTPolystarShapeNone, + LOTPolystarShapeStar, + LOTPolystarShapePolygon +} LOTPolystarShape; + +@interface LOTShapeStar : NSObject + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate; + +@property (nonatomic, readonly) LOTAnimatableNumberValue *outerRadius; +@property (nonatomic, readonly) LOTAnimatableNumberValue *outerRoundness; + +@property (nonatomic, readonly) LOTAnimatableNumberValue *innerRadius; +@property (nonatomic, readonly) LOTAnimatableNumberValue *innerRoundness; + +@property (nonatomic, readonly) LOTAnimatablePointValue *position; +@property (nonatomic, readonly) LOTAnimatableNumberValue *numberOfPoints; +@property (nonatomic, readonly) LOTAnimatableNumberValue *rotation; + +@property (nonatomic, readonly) LOTPolystarShape type; + +@end diff --git a/lottie-ios/Classes/Models/LOTShapeStar.m b/lottie-ios/Classes/Models/LOTShapeStar.m new file mode 100644 index 0000000000..b7b45b9b5a --- /dev/null +++ b/lottie-ios/Classes/Models/LOTShapeStar.m @@ -0,0 +1,63 @@ +// +// LOTShapeStar.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTShapeStar.h" +#import "LOTAnimatableNumberValue.h" +#import "LOTAnimatablePointValue.h" + +@implementation LOTShapeStar + +- (instancetype)initWithJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate { + self = [super init]; + if (self) { + [self _mapFromJSON:jsonDictionary frameRate:frameRate]; + } + return self; +} + +- (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate { + NSDictionary *outerRadius = jsonDictionary[@"or"]; + if (outerRadius) { + _outerRadius = [[LOTAnimatableNumberValue alloc] initWithNumberValues:outerRadius frameRate:frameRate]; + } + + NSDictionary *outerRoundness = jsonDictionary[@"os"]; + if (outerRoundness) { + _outerRoundness = [[LOTAnimatableNumberValue alloc] initWithNumberValues:outerRoundness frameRate:frameRate]; + } + + NSDictionary *innerRadius = jsonDictionary[@"ir"]; + if (innerRadius) { + _innerRadius = [[LOTAnimatableNumberValue alloc] initWithNumberValues:innerRadius frameRate:frameRate]; + } + + NSDictionary *innerRoundness = jsonDictionary[@"is"]; + if (innerRoundness) { + _innerRoundness = [[LOTAnimatableNumberValue alloc] initWithNumberValues:innerRoundness frameRate:frameRate]; + } + + NSDictionary *position = jsonDictionary[@"p"]; + if (position) { + _position = [[LOTAnimatablePointValue alloc] initWithPointValues:position frameRate:frameRate]; + } + + NSDictionary *numberOfPoints = jsonDictionary[@"pt"]; + if (numberOfPoints) { + _numberOfPoints = [[LOTAnimatableNumberValue alloc] initWithNumberValues:numberOfPoints frameRate:frameRate]; + } + + NSDictionary *rotation = jsonDictionary[@"r"]; + if (rotation) { + _rotation = [[LOTAnimatableNumberValue alloc] initWithNumberValues:rotation frameRate:frameRate]; + } + + NSNumber *type = jsonDictionary[@"sy"]; + _type = type.integerValue; +} + +@end diff --git a/lottie-ios/Classes/Models/LOTShapeStroke.m b/lottie-ios/Classes/Models/LOTShapeStroke.m index 4f07c082d9..5af37295d2 100644 --- a/lottie-ios/Classes/Models/LOTShapeStroke.m +++ b/lottie-ios/Classes/Models/LOTShapeStroke.m @@ -9,6 +9,7 @@ #import "LOTShapeStroke.h" #import "LOTAnimatableNumberValue.h" #import "LOTAnimatableColorValue.h" +#import "CGGeometry+LOTAdditions.h" @implementation LOTShapeStroke @@ -35,6 +36,9 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR if (opacity) { _opacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:opacity frameRate:frameRate]; [_opacity remapValuesFromMin:@0 fromMax:@100 toMin:@0 toMax:@1]; + [_opacity.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; } _capType = [jsonDictionary[@"lc"] integerValue] - 1; diff --git a/lottie-ios/Classes/Models/LOTShapeTransform.h b/lottie-ios/Classes/Models/LOTShapeTransform.h index fe7acf456f..916f25f7af 100644 --- a/lottie-ios/Classes/Models/LOTShapeTransform.h +++ b/lottie-ios/Classes/Models/LOTShapeTransform.h @@ -8,6 +8,7 @@ #import #import +#import @class LOTAnimatableNumberValue; @class LOTAnimatablePointValue; @@ -19,6 +20,8 @@ - (instancetype)initWithJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameRate compBounds:(CGRect)compBounds; +- (CATransform3D)transformForFrame:(NSNumber *)frame; + @property (nonatomic, readonly) CGRect compBounds; @property (nonatomic, readonly) LOTAnimatablePointValue *position; @property (nonatomic, readonly) LOTAnimatablePointValue *anchor; diff --git a/lottie-ios/Classes/Models/LOTShapeTransform.m b/lottie-ios/Classes/Models/LOTShapeTransform.m index 3d842a57e7..98408623fa 100644 --- a/lottie-ios/Classes/Models/LOTShapeTransform.m +++ b/lottie-ios/Classes/Models/LOTShapeTransform.m @@ -51,6 +51,9 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR NSDictionary *scale = jsonDictionary[@"s"]; if (scale) { _scale = [[LOTAnimatableScaleValue alloc] initWithScaleValues:scale frameRate:frameRate]; + [_scale.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; } NSDictionary *rotation = jsonDictionary[@"r"]; @@ -59,12 +62,18 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR [_rotation remapValueWithBlock:^CGFloat(CGFloat inValue) { return LOT_DegreesToRadians(inValue); }]; + [_rotation.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_DegreesToRadians(inValue); + }]; } NSDictionary *opacity = jsonDictionary[@"o"]; if (opacity) { _opacity = [[LOTAnimatableNumberValue alloc] initWithNumberValues:opacity frameRate:frameRate]; [_opacity remapValuesFromMin:@0 fromMax:@100 toMin:@0 toMax:@1]; + [_opacity.keyframeGroup remapKeyframesWithBlock:^CGFloat(CGFloat inValue) { + return LOT_RemapValue(inValue, 0, 100, 0, 1); + }]; } NSString *name = jsonDictionary[@"nm"]; @@ -80,6 +89,14 @@ - (void)_mapFromJSON:(NSDictionary *)jsonDictionary frameRate:(NSNumber *)frameR } +- (CATransform3D)transformForFrame:(NSNumber *)frame { + CATransform3D translate = CATransform3DMakeTranslation(_position.initialPoint.x, _position.initialPoint.y, 0); + CATransform3D rotate = CATransform3DRotate(translate, _rotation.initialValue.floatValue, 0, 0, 1); + CATransform3D scale = CATransform3DConcat(_scale.initialScale, rotate); + CATransform3D anchor = CATransform3DTranslate(scale, -1 *_anchor.initialPoint.x, -1 *_anchor.initialPoint.y, 0); + return anchor; +} + - (NSString *)description { return [NSString stringWithFormat:@"LOTShapeTransform \"Position: %@ Anchor: %@ Scale: %@ Rotation: %@ Opacity: %@\"", _position.description, _anchor.description, _scale.description, _rotation.description, _opacity.description]; } diff --git a/lottie-ios/Classes/Private/LOTAnimationView.m b/lottie-ios/Classes/Private/LOTAnimationView.m index 46a27c8e5b..2a42044bd6 100644 --- a/lottie-ios/Classes/Private/LOTAnimationView.m +++ b/lottie-ios/Classes/Private/LOTAnimationView.m @@ -14,6 +14,7 @@ #import "LOTAnimationView_Internal.h" #import "LOTAnimationCache.h" #import "LOTCompositionLayer.h" +#import "LOTCompositionContainer.h" @implementation LOTAnimationState { BOOL _needsAnimationUpdate; @@ -189,6 +190,7 @@ - (void)logStats:(NSString *)logName { @implementation LOTAnimationView { CALayer *_timingLayer; + LOTCompositionContainer *_compContainer; LOTCompositionLayer *_compLayer; CADisplayLink *_completionDisplayLink; BOOL hasFullyInitialized_; @@ -217,15 +219,11 @@ + (instancetype)animationNamed:(NSString *)animationName inBundle:(NSBundle *)bu NSDictionary *JSONObject = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error] : nil; if (JSONObject && !error) { - LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:JSONObject]; + LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:JSONObject withAssetBundle:bundle]; [[LOTAnimationCache sharedCache] addAnimation:laScene forKey:animationName]; return [[LOTAnimationView alloc] initWithModel:laScene inBundle:bundle]; } - - NSException* resourceNotFoundException = [NSException exceptionWithName:@"ResourceNotFoundException" - reason:[error localizedDescription] - userInfo:nil]; - @throw resourceNotFoundException; + return [[LOTAnimationView alloc] initWithModel:nil inBundle:nil]; } + (instancetype)animationFromJSON:(NSDictionary *)animationJSON { @@ -233,7 +231,7 @@ + (instancetype)animationFromJSON:(NSDictionary *)animationJSON { } + (instancetype)animationFromJSON:(NSDictionary *)animationJSON inBundle:(NSBundle *)bundle{ - LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:animationJSON]; + LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:animationJSON withAssetBundle:bundle]; return [[LOTAnimationView alloc] initWithModel:laScene inBundle:bundle]; } @@ -250,7 +248,7 @@ + (instancetype)animationWithFilePath:(NSString *)filePath{ NSDictionary *JSONObject = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error] : nil; if (JSONObject && !error) { - LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:JSONObject]; + LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:JSONObject withAssetBundle:[NSBundle mainBundle]]; laScene.rootDirectory = [filePath stringByDeletingLastPathComponent]; [[LOTAnimationCache sharedCache] addAnimation:laScene forKey:animationName]; return [[LOTAnimationView alloc] initWithModel:laScene inBundle:[NSBundle mainBundle]]; @@ -283,7 +281,7 @@ - (instancetype)initWithContentsOfURL:(NSURL *)url { return; } - LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:animationJSON]; + LOTComposition *laScene = [[LOTComposition alloc] initWithJSON:animationJSON withAssetBundle:[NSBundle mainBundle]]; dispatch_async(dispatch_get_main_queue(), ^(void){ [[LOTAnimationCache sharedCache] addAnimation:laScene forKey:url.absoluteString]; [self _initializeAnimationContainer]; @@ -327,6 +325,13 @@ - (void)_initializeAnimationContainer { - (void)_setupWithSceneModel:(LOTComposition *)model restoreAnimationState:(BOOL)restoreAnimation { _sceneModel = model; + if (DEBUG_USE_NEW_RENDERER) { + _compContainer = [[LOTCompositionContainer alloc] initWithModel:nil inLayerGroup:nil withLayerGroup:_sceneModel.layerGroup withAssestGroup:_sceneModel.assetGroup]; + [self.layer addSublayer:_compContainer]; + _compContainer.currentFrame = @0; + hasFullyInitialized_ = YES; + return; + } [self _buildSubviewsFromModel]; LOTAnimationState *oldState = _animationState; _animationState = [[LOTAnimationState alloc] initWithDuration:_sceneModel.timeDuration layer:_timingLayer frameRate:_sceneModel.framerate]; @@ -367,6 +372,19 @@ - (void)play { } - (void)playWithCompletion:(LOTAnimationCompletionBlock)completion { + if (DEBUG_USE_NEW_RENDERER) { + NSNumber *start = _compContainer.currentFrame; + NSNumber *end = _sceneModel.endFrame; + NSTimeInterval duration = (end.floatValue - start.floatValue) / _sceneModel.framerate.floatValue; + CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"currentFrame"]; + animation.fromValue = start; + animation.toValue = end; + animation.duration = duration; + animation.fillMode = kCAFillModeForwards; + [_compContainer addAnimation:animation forKey:@"play"]; + return; + } + if (completion) { self.completionBlock = completion; } @@ -440,8 +458,15 @@ - (void)setAnimationProgress:(CGFloat)animationProgress { [self _callCompletionIfNecessary]; } - [_animationState setAnimatedProgress:animationProgress updateAnimation:self.window != nil]; - + if (DEBUG_USE_NEW_RENDERER) { + CGFloat duration = _sceneModel.endFrame.floatValue - _sceneModel.startFrame.floatValue; + CGFloat frame = (duration * animationProgress) + _sceneModel.startFrame.floatValue; + + _compContainer.currentFrame = @(frame); + + } else { + [_animationState setAnimatedProgress:animationProgress updateAnimation:self.window != nil]; + } [self stopDisplayLink]; } @@ -597,6 +622,11 @@ - (void)_layout { [CATransaction begin]; [CATransaction setDisableActions:YES]; + _compContainer.transform = CATransform3DIdentity; + _compContainer.bounds = _sceneModel.compBounds; + _compContainer.viewportBounds = _sceneModel.compBounds; + _compContainer.transform = xform; + _compContainer.position = centerPoint; _compLayer.transform = CATransform3DIdentity; _compLayer.bounds = _sceneModel.compBounds; _compLayer.transform = xform; diff --git a/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h b/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h index 58f101c9bb..ef6db1ca0b 100644 --- a/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h +++ b/lottie-ios/Classes/PublicHeaders/LOTAnimationView.h @@ -16,21 +16,23 @@ typedef void (^LOTAnimationCompletionBlock)(BOOL animationFinished); + (nonnull instancetype)animationNamed:(nonnull NSString *)animationName NS_SWIFT_NAME(init(name:)); + (nonnull instancetype)animationNamed:(nonnull NSString *)animationName inBundle:(nonnull NSBundle *)bundle NS_SWIFT_NAME(init(name:bundle:)); + (nonnull instancetype)animationFromJSON:(nonnull NSDictionary *)animationJSON NS_SWIFT_NAME(init(json:)); -+ (instancetype)animationFromJSON:(NSDictionary *)animationJSON inBundle:(NSBundle *)bundle NS_SWIFT_NAME(init(json:bundle:)); ++ (nonnull instancetype)animationWithFilePath:(nonnull NSString *)filePath NS_SWIFT_NAME(init(filePath:)); ++ (nonnull instancetype)animationFromJSON:(nullable NSDictionary *)animationJSON inBundle:(nullable NSBundle *)bundle NS_SWIFT_NAME(init(json:bundle:)); - (nonnull instancetype)initWithContentsOfURL:(nonnull NSURL *)url; -+ (instancetype)animationWithFilePath:(NSString *)filePath NS_SWIFT_NAME(init(filePath:)); - @property (nonatomic, readonly) BOOL isAnimationPlaying; @property (nonatomic, assign) BOOL loopAnimation; +@property (nonatomic, assign) BOOL autoReverseAnimation; @property (nonatomic, assign) CGFloat animationProgress; @property (nonatomic, assign) CGFloat animationSpeed; @property (nonatomic, readonly) CGFloat animationDuration; +- (void)playToFrame:(nonnull NSNumber *)frame withCompletion:(nullable LOTAnimationCompletionBlock)completion; - (void)playWithCompletion:(nullable LOTAnimationCompletionBlock)completion; - (void)play; - (void)pause; +- (void)rewind; - (void)addSubview:(nonnull LOTView *)view toLayerNamed:(nonnull NSString *)layer; diff --git a/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.h new file mode 100644 index 0000000000..f292cfcbc3 --- /dev/null +++ b/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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m new file mode 100644 index 0000000000..ad867e07c2 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTCircleAnimator.m @@ -0,0 +1,73 @@ +// +// LOTCircleAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTCircleAnimator.h" +#import "LOTAnimatablePointValue.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]; + if (self) { + _centerInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeCircle.position.keyframeGroup.keyframes]; + _sizeInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeCircle.size.keyframeGroup.keyframes]; + _reversed = shapeCircle.reversed; + } + return self; +} + +- (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 contrsucts 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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.h new file mode 100644 index 0000000000..6d8fb1a279 --- /dev/null +++ b/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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m new file mode 100644 index 0000000000..513ad523a6 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPathAnimator.m @@ -0,0 +1,37 @@ +// +// LOTPathAnimator.m +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTPathAnimator.h" +#import "LOTPathInterpolator.h" +#import "LOTAnimatableShapeValue.h" + +@implementation LOTPathAnimator { + LOTShapePath *_pathConent; + LOTPathInterpolator *_interpolator; +} + +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode + shapePath:(LOTShapePath *_Nonnull)shapePath { + self = [super initWithInputNode:inputNode]; + if (self) { + _pathConent = shapePath; + _interpolator = [[LOTPathInterpolator alloc] initWithKeyframes:_pathConent.shapePath.keyframeGroup.keyframes]; + } + return self; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return [_interpolator hasUpdateForFrame:frame]; + +} + +- (void)performLocalUpdate { + self.localPath = [_interpolator pathForFrame:self.currentFrame cacheLengths:self.pathShouldCacheLengths]; +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.h new file mode 100644 index 0000000000..b8f5ca52c0 --- /dev/null +++ b/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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m new file mode 100644 index 0000000000..1eae044979 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolygonAnimator.m @@ -0,0 +1,103 @@ +// +// LOTPolygonAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPolygonAnimator.h" +#import "LOTAnimatablePointValue.h" +#import "LOTAnimatableNumberValue.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]; + if (self) { + _outerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRadius.keyframeGroup.keyframes]; + _outerRoundnessInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRoundness.keyframeGroup.keyframes]; + _pointsInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.numberOfPoints.keyframeGroup.keyframes]; + _rotationInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.rotation.keyframeGroup.keyframes]; + _positionInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeStar.position.keyframeGroup.keyframes]; + } + return self; +} + +- (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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.h new file mode 100644 index 0000000000..f2c0089838 --- /dev/null +++ b/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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m new file mode 100644 index 0000000000..864d00fdbd --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTPolystarAnimator.m @@ -0,0 +1,148 @@ +// +// LOTPolystarAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTPolystarAnimator.h" +#import "LOTAnimatablePointValue.h" +#import "LOTAnimatableNumberValue.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]; + if (self) { + _outerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRadius.keyframeGroup.keyframes]; + _innerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.innerRadius.keyframeGroup.keyframes]; + _outerRoundnessInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.outerRoundness.keyframeGroup.keyframes]; + _innerRoundnessInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.innerRoundness.keyframeGroup.keyframes]; + _pointsInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.numberOfPoints.keyframeGroup.keyframes]; + _rotationInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeStar.rotation.keyframeGroup.keyframes]; + _positionInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeStar.position.keyframeGroup.keyframes]; + } + return self; +} + +- (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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.h new file mode 100644 index 0000000000..019e9e000b --- /dev/null +++ b/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/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m new file mode 100644 index 0000000000..12d1ba9c70 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/AnimatorNodes/LOTRoundedRectAnimator.m @@ -0,0 +1,145 @@ +// +// LOTRoundedRectAnimator.m +// Lottie +// +// Created by brandon_withrow on 7/19/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRoundedRectAnimator.h" +#import "LOTAnimatablePointValue.h" +#import "LOTPointInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "LOTAnimatableNumberValue.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]; + if (self) { + _centerInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeRectangle.position.keyframeGroup.keyframes]; + _sizeInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:shapeRectangle.size.keyframeGroup.keyframes]; + _cornerRadiusInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:shapeRectangle.cornerRadius.keyframeGroup.keyframes]; + _reversed = shapeRectangle.reversed; + } + return self; +} + +- (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/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h new file mode 100644 index 0000000000..e251103a5d --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.h @@ -0,0 +1,15 @@ +// +// LOTArrayInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" + +@interface LOTArrayInterpolator : LOTValueInterpolator + +- (NSArray *)numberArrayForFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTArrayInterpolator.m new file mode 100644 index 0000000000..a1ab152a23 --- /dev/null +++ b/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/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h new file mode 100644 index 0000000000..db83e715b6 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.h @@ -0,0 +1,16 @@ +// +// LOTColorInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" +#import "LOTPlatformCompat.h" + +@interface LOTColorInterpolator : LOTValueInterpolator + +- (UIColor *)colorForFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m new file mode 100644 index 0000000000..c915d6614d --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTColorInterpolator.m @@ -0,0 +1,26 @@ +// +// LOTColorInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTColorInterpolator.h" +#import "UIColor+Expanded.h" + +@implementation LOTColorInterpolator + +- (UIColor *)colorForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + if (progress == 0) { + return self.leadingKeyframe.colorValue; + } + if (progress == 1) { + return self.trailingKeyframe.colorValue; + } + UIColor *returnColor = [UIColor LOT_colorByLerpingFromColor:self.leadingKeyframe.colorValue toColor:self.trailingKeyframe.colorValue amount:progress]; + return returnColor; +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h new file mode 100644 index 0000000000..e3a83ffc87 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.h @@ -0,0 +1,16 @@ +// +// LOTNumberInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/11/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import +#import "LOTValueInterpolator.h" + +@interface LOTNumberInterpolator : LOTValueInterpolator + +- (CGFloat)floatValueForFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m new file mode 100644 index 0000000000..79d88fd4ec --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTNumberInterpolator.m @@ -0,0 +1,25 @@ +// +// 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]; + if (progress == 0) { + return self.leadingKeyframe.floatValue; + } + if (progress == 1) { + return self.trailingKeyframe.floatValue; + } + return LOT_RemapValue(progress, 0, 1, self.leadingKeyframe.floatValue, self.trailingKeyframe.floatValue); +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h new file mode 100644 index 0000000000..987f28e8b5 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.h @@ -0,0 +1,17 @@ +// +// 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" + +@interface LOTPathInterpolator : LOTValueInterpolator + +- (LOTBezierPath *)pathForFrame:(NSNumber *)frame cacheLengths:(BOOL)cacheLengths; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m new file mode 100644 index 0000000000..2c275e9fbc --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPathInterpolator.m @@ -0,0 +1,65 @@ +// +// 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]; + + 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; +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h new file mode 100644 index 0000000000..736c6a89fe --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.h @@ -0,0 +1,15 @@ +// +// LOTPointInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/12/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" + +@interface LOTPointInterpolator : LOTValueInterpolator + +- (CGPoint)pointValueForFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m new file mode 100644 index 0000000000..3690d44a24 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTPointInterpolator.m @@ -0,0 +1,32 @@ +// +// 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]; + if (progress == 0) { + return self.leadingKeyframe.pointValue; + } + if (progress == 1) { + return self.trailingKeyframe.pointValue; + } + 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); + return LOT_PointInCubicCurve(self.leadingKeyframe.pointValue, outTan, inTan, self.trailingKeyframe.pointValue, progress); + } + return LOT_PointInLine(self.leadingKeyframe.pointValue, self.trailingKeyframe.pointValue, progress); +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.h new file mode 100644 index 0000000000..54e59715c2 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.h @@ -0,0 +1,15 @@ +// +// LOTRectInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" + +@interface LOTRectInterpolator : LOTValueInterpolator + +- (CGRect)rectValueForFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.m new file mode 100644 index 0000000000..5748185dc8 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTRectInterpolator.m @@ -0,0 +1,29 @@ +// +// LOTRectInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTRectInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTRectInterpolator + +- (CGRect)rectValueForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + if (progress == 0) { + return self.leadingKeyframe.rectValue; + } + if (progress == 1) { + return self.trailingKeyframe.rectValue; + } + return CGRectMake(0, + 0, + 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)); + +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h new file mode 100644 index 0000000000..856336c7d4 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.h @@ -0,0 +1,15 @@ +// +// LOTSizeInterpolator.h +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTValueInterpolator.h" + +@interface LOTSizeInterpolator : LOTValueInterpolator + +- (CGSize)sizeValueForFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m new file mode 100644 index 0000000000..b2f4d866ed --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTSizeInterpolator.m @@ -0,0 +1,26 @@ +// +// LOTSizeInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/13/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTSizeInterpolator.h" +#import "CGGeometry+LOTAdditions.h" + +@implementation LOTSizeInterpolator + +- (CGSize)sizeValueForFrame:(NSNumber *)frame { + CGFloat progress = [self progressForFrame:frame]; + if (progress == 0) { + return self.leadingKeyframe.sizeValue; + } + if (progress == 1) { + return self.trailingKeyframe.sizeValue; + } + return 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)); +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h new file mode 100644 index 0000000000..612d6d0b86 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.h @@ -0,0 +1,37 @@ +// +// 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 "LOTAnimatableColorValue.h" +#import "LOTSizeInterpolator.h" +#import "LOTKeyframe.h" +#import "LOTLayer.h" + +@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; + +- (CATransform3D)transformForFrame:(NSNumber *)frame; +- (BOOL)hasUpdateForFrame:(NSNumber *)frame; + +@end diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m new file mode 100644 index 0000000000..f6b7920b6e --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTTransformInterpolator.m @@ -0,0 +1,126 @@ +// +// LOTTransformInterpolator.m +// Lottie +// +// Created by brandon_withrow on 7/18/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTTransformInterpolator.h" +#import "LOTAnimatablePointValue.h" +#import "LOTAnimatableScaleValue.h" +#import "LOTAnimatableNumberValue.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 { + if (layer.position) { + return [[LOTTransformInterpolator alloc] initWithPosition:layer.position.keyframeGroup.keyframes + rotation:layer.rotation.keyframeGroup.keyframes + anchor:layer.anchor.keyframeGroup.keyframes + scale:layer.scale.keyframeGroup.keyframes]; + } + return [[LOTTransformInterpolator alloc] initWithPositionX:layer.positionX.keyframeGroup.keyframes + positionY:layer.positionY.keyframeGroup.keyframes + rotation:layer.rotation.keyframeGroup.keyframes + anchor:layer.anchor.keyframeGroup.keyframes + scale:layer.scale.keyframeGroup.keyframes]; +} + +- (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/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h new file mode 100644 index 0000000000..6f7ae01c5c --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.h @@ -0,0 +1,63 @@ +// +// LOTValueInterpolator.h +// Pods +// +// Created by brandon_withrow on 7/10/17. +// +// + +#import +#import "LOTKeyframe.h" + +@interface LOTValueInterpolator : NSObject + +- (instancetype)initWithKeyframes:(NSArray *)keyframes; + +@property (nonatomic, weak) LOTKeyframe *leadingKeyframe; +@property (nonatomic, weak) LOTKeyframe *trailingKeyframe; + +- (BOOL)hasUpdateForFrame:(NSNumber *)frame; +- (CGFloat)progressForFrame:(NSNumber *)frame; + +@end + + +/* + + What do we need? + We need a keyframe interpolator for color, numbers, scale, shape, points and bounds + + How will this be done? + Each thing will need a list of keyframe objects + the keyframe object will hold its time, its value, its type, and an interpolation curve (type?) + + A LOTRenderNode will have its time set. + It needs to know if there are changes for timevalue + if there are + It will ask its keyframeinterpolator for its value at time + + at this point the keyframe interpolator will + find the keyframe span that fits the given time + it will interpolate its from to with the given time + it will return the value + + So what parts of the machine are there? + + LOTRenderNode - Handles the necessary geometry and render information + The geometry nodes will construct geometry OUTPUT from multiple sources of keyframe data + + LOTAnimatablePrimitives - Holds all keyframe information for a given channel + + + + + Interpolator - Has in time, out time, in value, out value, in tangent, out tangent + Returns value for time + + + What to do about bezier paths? + They need ot be created, interpolated, trimmed, and merged. + The lets minimize the times we actually create bezier paths, that seems expensive. + they will be created at runtime. Lets try that. + +*/ diff --git a/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m new file mode 100644 index 0000000000..af34351c31 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/InterpolatorNodes/LOTValueInterpolator.m @@ -0,0 +1,160 @@ +// +// 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 { + /* + 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 progession = 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) { + // Bezeir Time Curve + progession = LOT_CubicBezeirInterpolate(CGPointMake(0, 0), self.leadingKeyframe.outTangent, self.trailingKeyframe.inTangent, CGPointMake(1, 1), progession); + } + + return progession; +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h new file mode 100644 index 0000000000..d1c7a07e2f --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.h @@ -0,0 +1,95 @@ +// +// LOTAnimatorNode.h +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import +#import "LOTPlatformCompat.h" +#import "LOTBezierPath.h" + +extern NSInteger indentation_level; +@interface LOTAnimatorNode : NSObject + +/// Initializes the node with and optional intput node. +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode; + +/// 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; + +@end + +// TIME Is updated at the LAYER Level +// The LAYER has CONTAINER and updates its TIME. +// the CONTENTS of a CONTAINER can be other CONTAINERS, or ANIMATORS +// The CONATAINER also handles a subcoordinate XFORM and has a colleciton of RENDERERS +// The CONTAINER tells its RENDERERS and sub CONTAINERS to UPDATE TIME +// The RENDERERS tell their INPUT to update TIME and then asks for OUTPUTPATH +// The RENDERER then updates its SHAPELAYER + +// RENDERS NODES - path input shapelayer output +// - FILL +// - STROKE +// - GRADIENT FILL +// - GRADIENT STROKE + +// ANIMATOR NODES - Path input and path output +// - PATH +// - RECTANGLE +// - ELLIPSE +// - STAR + +// - GROUP + +// - TRIM PATH +// - MERGE PATH +// - TRANSFORM (Always last?) + +/* + + Seems like we actually have three kinds of nodes + Path nodes, which generate path data and merge with input data + Render nodes which render out their input + manipulators nodes, which all seem to operate differenctly. + + - Trimpath + Affects all path nodes upstream. Needs complete context before it can perform its operation. + + - Mergepath + Affects uses all path nodes upstream. Will disable all upstream rendernodes. + + - Repeater node + Affects all path nodes upstream. + +*/ + + diff --git a/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m new file mode 100644 index 0000000000..709c256daa --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/LOTAnimatorNode.m @@ -0,0 +1,99 @@ +// +// LOTAnimatorNode.m +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTAnimatorNode.h" +#import "LOTHelpers.h" + +NSInteger indentation_level = 0; + +@implementation LOTAnimatorNode + + +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode { + self = [super init]; + if (self) { + _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]) { + return NO; + } + NSString *name = NSStringFromClass([self class]); + if (ENABLE_DEBUG_LOGGING) [self logString:[NSString stringWithFormat:@"%@ %lu Checking for update", name, (unsigned long)self.hash]]; + BOOL localUpdate = [self needsUpdateForFrame:frame] || forceUpdate; + if (localUpdate && ENABLE_DEBUG_LOGGING) { + [self logString:[NSString stringWithFormat:@"%@ %lu Performing update", name, (unsigned long)self.hash]]; + } + 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(@"%@", logString); +} + +// TOBO BW Perf, make updates perform only when necessarry. Currently everything in a node is updated +/// Performs any local content update and updates self.localPath +- (void)performLocalUpdate { + self.localPath = [[LOTBezierPath alloc] init]; +} + +/// Rebuilts 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; +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/LOTRenderNode.h b/lottie-ios/Classes/RenderSystem/LOTRenderNode.h new file mode 100644 index 0000000000..94f363527a --- /dev/null +++ b/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 *)actionsForRenderLayer; + +@end diff --git a/lottie-ios/Classes/RenderSystem/LOTRenderNode.m b/lottie-ios/Classes/RenderSystem/LOTRenderNode.m new file mode 100644 index 0000000000..29ed03341e --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/LOTRenderNode.m @@ -0,0 +1,46 @@ +// +// LOTRenderNode.m +// Pods +// +// Created by brandon_withrow on 6/27/17. +// +// + +#import "LOTRenderNode.h" + +@implementation LOTRenderNode + +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nullable)inputNode { + self = [super initWithInputNode:inputNode]; + if (self) { + _outputLayer = [CAShapeLayer new]; + _outputLayer.actions = [self actionsForRenderLayer]; + } + return self; +} + +/// Layer Properties that need to disable implicit animations +- (NSDictionary *)actionsForRenderLayer { + return @{@"path": [NSNull null]}; +} + +/// Local interpolatores 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/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h b/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.h new file mode 100644 index 0000000000..daeca3ad1b --- /dev/null +++ b/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/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m b/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m new file mode 100644 index 0000000000..db6413ab5c --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/ManipulatorNodes/LOTTrimPathNode.m @@ -0,0 +1,91 @@ +// +// LOTTrimPathNode.m +// Lottie +// +// Created by brandon_withrow on 7/21/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTTrimPathNode.h" +#import "LOTAnimatableNumberValue.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]; + if (self) { + inputNode.pathShouldCacheLengths = YES; + _startInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:trimPath.start.keyframeGroup.keyframes]; + _endInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:trimPath.end.keyframeGroup.keyframes]; + _offsetInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:trimPath.offset.keyframeGroup.keyframes]; + } + return self; +} + +- (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:_startT toT:_endT offset:_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/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.h new file mode 100644 index 0000000000..74c8fe01d9 --- /dev/null +++ b/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 *_Nonnull)inputNode + shapeFill:(LOTShapeFill *_Nonnull)fill; + +@end diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m new file mode 100644 index 0000000000..8da7850202 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTFillRenderer.m @@ -0,0 +1,62 @@ +// +// LOTFillRenderer.m +// Lottie +// +// Created by brandon_withrow on 6/27/17. +// Copyright © 2017 Airbnb. All rights reserved. +// + +#import "LOTFillRenderer.h" +#import "LOTAnimatableColorValue.h" +#import "LOTAnimatableNumberValue.h" +#import "LOTColorInterpolator.h" +#import "LOTNumberInterpolator.h" +#import "LOTHelpers.h" + +@implementation LOTFillRenderer { + LOTColorInterpolator *colorInterpolator_; + LOTNumberInterpolator *opacityInterpolator_; + BOOL _evenOddFillRule; + CALayer *centerPoint_DEBUG; +} + +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nonnull)inputNode + shapeFill:(LOTShapeFill *_Nonnull)fill { + self = [super initWithInputNode:inputNode]; + if (self) { + colorInterpolator_ = [[LOTColorInterpolator alloc] initWithKeyframes:fill.color.keyframeGroup.keyframes]; + opacityInterpolator_ = [[LOTNumberInterpolator alloc] initWithKeyframes:fill.opacity.keyframeGroup.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; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return [colorInterpolator_ hasUpdateForFrame:frame] || [opacityInterpolator_ hasUpdateForFrame:frame]; +} + +- (void)performLocalUpdate { + centerPoint_DEBUG.backgroundColor = [colorInterpolator_ colorForFrame:self.currentFrame].CGColor; + centerPoint_DEBUG.borderColor = [UIColor lightGrayColor].CGColor; + centerPoint_DEBUG.borderWidth = 2.f; + self.outputLayer.fillColor = [colorInterpolator_ colorForFrame:self.currentFrame].CGColor; + 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/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.h new file mode 100644 index 0000000000..fa11617d68 --- /dev/null +++ b/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 *_Nonnull)inputNode + shapeGradientFill:(LOTShapeGradientFill *_Nonnull)fill; + +@end diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m new file mode 100644 index 0000000000..7cceb4cf85 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTGradientFillRender.m @@ -0,0 +1,144 @@ +// +// 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" + +@implementation LOTGradientFillRender { + BOOL _evenOddFillRule; + CALayer *centerPoint_DEBUG; + + CAShapeLayer *_maskShape; + CAGradientLayer *_gradientOpacityLayer; + CAGradientLayer *_gradientLayer; + NSInteger _numberOfPositions; + + CGPoint _startPoint; + CGPoint _endPoint; + + LOTArrayInterpolator *_gradientInterpolator; + LOTPointInterpolator *_startPointInterpolator; + LOTPointInterpolator *_endPointInterpolator; + LOTNumberInterpolator *_opacityInterpolator; +} + +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nonnull)inputNode + shapeGradientFill:(LOTShapeGradientFill *_Nonnull)fill { + self = [super initWithInputNode:inputNode]; + if (self) { + _gradientInterpolator = [[LOTArrayInterpolator alloc] initWithKeyframes:fill.gradient.keyframeGroup.keyframes]; + _startPointInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:fill.startPoint.keyframeGroup.keyframes]; + _endPointInterpolator = [[LOTPointInterpolator alloc] initWithKeyframes:fill.endPoint.keyframeGroup.keyframes]; + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:fill.opacity.keyframeGroup.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 = [CAGradientLayer new]; + _gradientOpacityLayer.actions = @{@"startPoint" : [NSNull null], + @"endPoint" : [NSNull null], + @"opacity" : [NSNull null], + @"locations" : [NSNull null], + @"colors" : [NSNull null], + @"bounds" : [NSNull null], + @"anchorPoint" : [NSNull null]}; + _gradientOpacityLayer.mask = _maskShape; + [wrapperLayer addSublayer:_gradientOpacityLayer]; + + _gradientLayer = [CAGradientLayer new]; + _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; +} + +- (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)]; + } + _gradientOpacityLayer.locations = opacitylocationsArray; + _gradientOpacityLayer.colors = opacityArray; + _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); + CGPoint modifiedStart = CGPointMake((_startPoint.x - frame.origin.x) / frame.size.width, + (_startPoint.y - frame.origin.y) / frame.size.height); + CGPoint modifiedEnd = CGPointMake((_endPoint.x - frame.origin.x) / frame.size.width, + (_endPoint.y - frame.origin.y) / frame.size.height); + _maskShape.path = self.inputNode.outputPath.CGPath; + _gradientOpacityLayer.bounds = frame; + _gradientOpacityLayer.anchorPoint = modifiedAnchor; + _gradientOpacityLayer.startPoint = modifiedStart; + _gradientOpacityLayer.endPoint = modifiedEnd; + _gradientLayer.bounds = frame; + _gradientLayer.anchorPoint = modifiedAnchor; + _gradientLayer.startPoint = modifiedStart; + _gradientLayer.endPoint = modifiedEnd; +} + +- (NSDictionary *)actionsForRenderLayer { + return @{@"backgroundColor": [NSNull null], + @"fillColor": [NSNull null], + @"opacity" : [NSNull null]}; +} + +@end diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h new file mode 100644 index 0000000000..cbad376d98 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.h @@ -0,0 +1,20 @@ +// +// 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; + +@property (nonatomic, strong, readonly) CALayer * _Nonnull containerLayer; + +@end + + diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m new file mode 100644 index 0000000000..fb196f8ca7 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRenderGroup.m @@ -0,0 +1,175 @@ +// +// 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; + + LOTNumberInterpolator *_opacityInterpolator; + LOTTransformInterpolator *_transformInterolator; +} + +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode * _Nullable)inputNode + contents:(NSArray * _Nonnull)contents { + self = [super initWithInputNode:inputNode]; + if (self) { + _containerLayer = [CALayer layer]; + _containerLayer.actions = @{@"transform": [NSNull null], + @"opacity": [NSNull null]}; + [self buildContents:contents]; + } + return self; +} + +- (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]; + [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.keyframeGroup.keyframes]; + _transformInterolator = [[LOTTransformInterpolator alloc] initWithPosition:transform.position.keyframeGroup.keyframes + rotation:transform.rotation.keyframeGroup.keyframes + anchor:transform.anchor.keyframeGroup.keyframes + scale:transform.scale.keyframeGroup.keyframes]; + } + _rootNode = previousNode; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return ([_opacityInterpolator hasUpdateForFrame:frame] || + [_transformInterolator hasUpdateForFrame:frame] || + [_rootNode needsUpdateForFrame:frame]); + +} + +- (BOOL)updateWithFrame:(NSNumber *)frame withModifierBlock:(void (^ _Nullable)(LOTAnimatorNode * _Nonnull))modifier forceLocalUpdate:(BOOL)forceUpdate { + indentation_level = indentation_level + 1; + [_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 (_transformInterolator) { + CATransform3D xform = [_transformInterolator 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; +} + +@end + +/* + + A render group is a colleciton of items, some animators and some rendered objects. + the render group itself will hold the items in a subview and will apply a transform to them. + the render group will also output the sum of all its paths with the transform applied on request + + */ diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.h new file mode 100644 index 0000000000..1730b888a0 --- /dev/null +++ b/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 *_Nonnull)inputNode + shapeRepeater:(LOTShapeRepeater *_Nonnull)repeater; + +@end diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m new file mode 100644 index 0000000000..418ee4d307 --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTRepeaterRenderer.m @@ -0,0 +1,91 @@ +// +// 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 _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nonnull)inputNode + shapeRepeater:(LOTShapeRepeater *_Nonnull)repeater { + self = [super initWithInputNode:inputNode]; + if (self) { + _transformInterpolator = [[LOTTransformInterpolator alloc] initWithPosition:repeater.position.keyframeGroup.keyframes + rotation:repeater.rotation.keyframeGroup.keyframes + anchor:repeater.anchorPoint.keyframeGroup.keyframes + scale:repeater.scale.keyframeGroup.keyframes]; + _copiesInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.copies.keyframeGroup.keyframes]; + _offsetInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.offset.keyframeGroup.keyframes]; + _startOpacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.startOpacity.keyframeGroup.keyframes]; + _endOpacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:repeater.endOpacity.keyframeGroup.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; +} + +- (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/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.h new file mode 100644 index 0000000000..0032904d30 --- /dev/null +++ b/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 *_Nonnull)inputNode + shapeStroke:(LOTShapeStroke *_Nonnull)stroke; + + +@end diff --git a/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m new file mode 100644 index 0000000000..d7896fae8b --- /dev/null +++ b/lottie-ios/Classes/RenderSystem/RenderNodes/LOTStrokeRenderer.m @@ -0,0 +1,57 @@ +// +// 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" +#import "LOTAnimatableColorValue.h" +#import "LOTAnimatableNumberValue.h" + +@implementation LOTStrokeRenderer { + LOTColorInterpolator *_colorInterpolator; + LOTNumberInterpolator *_opacityInterpolator; + LOTNumberInterpolator *_widthInterpolator; +} + +- (instancetype _Nonnull )initWithInputNode:(LOTAnimatorNode *_Nonnull)inputNode + shapeStroke:(LOTShapeStroke *_Nonnull)stroke { + self = [super initWithInputNode:inputNode]; + if (self) { + _colorInterpolator = [[LOTColorInterpolator alloc] initWithKeyframes:stroke.color.keyframeGroup.keyframes]; + _opacityInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:stroke.opacity.keyframeGroup.keyframes]; + _widthInterpolator = [[LOTNumberInterpolator alloc] initWithKeyframes:stroke.width.keyframeGroup.keyframes]; + self.outputLayer.fillColor = nil; + self.outputLayer.lineDashPattern = stroke.lineDashPattern; + self.outputLayer.lineCap = stroke.capType == LOTLineCapTypeRound ? kCALineCapRound : kCALineCapButt; + } + return self; +} + +- (BOOL)needsUpdateForFrame:(NSNumber *)frame { + return ([_colorInterpolator hasUpdateForFrame:frame] || + [_opacityInterpolator hasUpdateForFrame:frame] || + [_widthInterpolator hasUpdateForFrame:frame]); +} + +- (void)performLocalUpdate { + self.outputLayer.strokeColor = [_colorInterpolator colorForFrame:self.currentFrame].CGColor; + 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