diff --git a/README.md b/README.md
index 9aad797ebb51..daf9ddfae1ff 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 2470ef0038c2..7d895bf752ad 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -90,8 +90,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
- versionCode 1001038000
- versionName "1.3.80-0"
+ versionCode 1001038106
+ versionName "1.3.81-6"
}
flavorDimensions "default"
diff --git a/assets/animations/Magician.json b/assets/animations/Magician.json
new file mode 100644
index 000000000000..393ad8ad3964
--- /dev/null
+++ b/assets/animations/Magician.json
@@ -0,0 +1 @@
+{"v":"5.9.6","fr":24,"ip":0,"op":69,"w":853,"h":480,"nm":"Comp 1","ddd":0,"assets":[{"id":"comp_0","nm":"Expensify-Magic-Link-120822-kjs-1","fr":24,"layers":[{"ddd":0,"ind":2,"ty":3,"nm":"sparkle 5 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1028,450.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,12.5]},"t":18,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,13.5]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":23,"s":[100,100,100]},{"t":28,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"ip":18,"op":29,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"sparkle 5 Outlines","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-12.47,143.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,23.234],[0,0],[0,-22.979],[0,0]],"o":[[0,23.49],[0,0],[0,-22.723],[0,0]],"v":[[0,-27.575],[-12,1.021],[0,27.575],[12,1.021]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.560784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1027.956,450.428],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":29,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"sparkle 4 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1056,396.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":20,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":25,"s":[100,100,100]},{"t":30,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"ip":20,"op":31,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"sparkle 4 Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-40.47,197.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,38.984],[0,0],[0,-38.556],[0,0]],"o":[[0,39.413],[0,0],[0,-38.127],[0,0]],"v":[[0,-46.267],[-20.135,1.714],[0,46.267],[20.135,1.714]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.560784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1056.968,395.412],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":31,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"sparkle 3 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1242,355.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":22,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":27,"s":[100,100,100]},{"t":32,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"ip":22,"op":33,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"sparkle 3 Outlines","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-226.47,238.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,23.234],[0,0],[0,-22.979],[0,0]],"o":[[0,23.49],[0,0],[0,-22.723],[0,0]],"v":[[0,-27.575],[-12,1.021],[0,27.575],[12,1.021]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.560784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1242.386,355.773],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":33,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"sparkle 2 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1152,138.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":24,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":29,"s":[100,100,100]},{"t":34,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"ip":24,"op":35,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"sparkle 2 Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-136.47,455.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,15.082],[0,0],[0,-14.917],[0,0]],"o":[[0,15.248],[0,0],[0,-14.751],[0,0]],"v":[[0,-17.9],[-7.79,0.663],[0,17.9],[7.79,0.663]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.560784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1152.535,138.957],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":24,"op":35,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":10,"ty":3,"nm":"sparkle 1 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1120,116.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":26,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":31,"s":[100,100,100]},{"t":36,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"ip":26,"op":37,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"sparkle 1 Outlines","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-104.47,477.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,23.234],[0,0],[0,-22.979],[0,0]],"o":[[0,23.49],[0,0],[0,-22.723],[0,0]],"v":[[0,-27.575],[-12,1.021],[0,27.575],[12,1.021]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.560784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1120.952,117.61],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":26,"op":37,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"body all comp","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[966,555.5,0],"to":[0,-2,0],"ti":[0,3,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[966,543.5,0],"to":[0,-3,0],"ti":[0,-0.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":39,"s":[966,537.5,0],"to":[0,0.667,0],"ti":[0,-1,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":47,"s":[966,547.5,0],"to":[0,1,0],"ti":[0,0.667,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":50,"s":[966,543.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[966,543.5,0],"to":[0,2,0],"ti":[0,-2,0]},{"t":68,"s":[966,555.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[966,543.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":69,"st":0,"ct":1,"bm":0}]},{"id":"comp_1","nm":"body all comp","fr":24,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"bowtie peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[878,480.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"head peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[23]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[2]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[0]},{"t":68,"s":[23]}],"ix":10},"p":{"a":0,"k":[852,470.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"body peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[871,504.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"hand 1 peg","parent":5,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[38]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[-6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[0]},{"t":68,"s":[38]}],"ix":10},"p":{"a":0,"k":[257,-81.649,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":3,"nm":"arm 1 b peg","parent":6,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[-7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[0]},{"t":68,"s":[10]}],"ix":10},"p":{"a":0,"k":[-43,-223.649,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"arm 1 a peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[27]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[-1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[0]},{"t":68,"s":[27]}],"ix":10},"p":{"a":0,"k":[810,557.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":3,"nm":"hat hand peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[1018,678.851,0],"to":[0,-2.333,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1018,664.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":39,"s":[1018,651.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":47,"s":[1018,665.183,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":50,"s":[1018,664.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[1018,664.851,0],"to":[0,0,0],"ti":[0,-2.333,0]},{"t":68,"s":[1018,678.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"arm 2 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[909,524.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,110,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":33,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":39,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":47,"s":[102.667,101.333,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":50,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":51,"s":[100,100,100]},{"t":68,"s":[100,110,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"finger OL Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[91.53,444.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.637,-2.817],[-2.045,4.838],[-0.469,2.45]],"o":[[-0.672,4.914],[3.649,6.282],[0.857,-2.027],[0,0]],"v":[[-6.613,-9.515],[-6.333,3.232],[5.984,0.521],[7.969,-6.263]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[996.38,135.455],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.909,2.631],[1.728,-0.883],[0.602,-1.676],[-1.618,0.846],[1.006,-4.022],[1.441,-1.398]],"o":[[7.289,-8.787],[-2.536,-1.707],[-2.314,1.145],[1.392,-3.877],[-2.968,1.516],[-0.595,2.382],[0,0]],"v":[[2.596,13.132],[5.688,-11.335],[-0.681,-12.248],[-5.282,-6.033],[-0.681,-12.248],[-6.509,-2.321],[-9.884,3.321]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[978.982,153.671],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"wand Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[91.53,444.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[14.674,-0.821],[-11.753,-8.458],[-14.673,0.765],[11.893,8.458]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1085.197,172.322],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-63.345,-23.263],[-65.734,-14.123],[62.813,23.263],[65.734,14.039]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1007.71,149.825],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"hand 1 Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[91.53,444.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-21.609,3.182],[5.634,3.792],[1.728,-0.882],[0.602,-1.677],[-1.618,0.847],[1.005,-4.022],[0,0],[4.242,4.772],[0,0],[-4.243,-4.773],[0,0],[-1.591,6.363],[-2.968,1.517],[-10.278,-0.664],[-4.033,-6.944],[-2.045,4.838],[2.422,8.333],[11.74,-1.97],[1.747,-3.885],[-0.997,6.54],[0.947,-0.237],[-0.055,0.183],[7.231,2.572],[2.305,-6.158],[0,0],[9.015,-15.908],[0,0],[3.29,5.556],[-0.717,0],[-0.304,0.814],[5.059,-2.024],[-0.179,-11.135],[0,0],[7.424,7.954],[5.57,-3.974],[-4.772,-9.943],[2.386,-10.34],[0,0]],"o":[[18.295,-8.352],[21.245,-3.128],[-2.536,-1.707],[-2.314,1.145],[1.392,-3.878],[-2.968,1.517],[-1.591,6.363],[0,0],[-4.243,-4.773],[0,0],[4.242,4.772],[0,0],[1.005,-4.022],[1.396,-11.442],[10.738,-0.796],[3.649,6.282],[3.428,-8.109],[-2.878,-9.899],[-0.997,6.54],[1.747,-3.885],[0.343,-0.215],[0.947,-0.237],[2.726,-17.866],[-3.944,-1.403],[3.29,5.556],[0,0],[9.015,-15.908],[0,0],[-0.005,-0.065],[0.199,0],[-2.03,-3.429],[-8.499,3.4],[0.266,16.438],[0,0],[-4.417,-4.732],[-5.966,8.749],[0,0],[-2.04,8.837],[0,0]],"v":[[-25.087,48.957],[11.645,60.722],[29.144,28.375],[22.775,27.462],[18.174,33.678],[22.775,27.462],[16.948,37.391],[8.463,46.406],[3.691,33.148],[-9.036,28.375],[3.691,33.148],[8.463,46.406],[16.948,37.391],[22.775,27.462],[29.807,-1.718],[34.522,24.729],[46.839,22.018],[48.109,-7.008],[22.305,-19.003],[18.114,-2.729],[22.305,-19.003],[22.052,-18.621],[22.305,-19.003],[17.146,-62.502],[5.497,-56.095],[8.993,-41.622],[3.16,-3.442],[8.993,-41.622],[5.497,-56.095],[5.845,-57.198],[5.497,-56.095],[-4.794,-59.651],[-5.855,-28.895],[-16.991,-5.562],[-29.452,-31.148],[-44.565,-35.125],[-35.418,-11.263],[-31.838,9.815],[-42.974,25.724]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[955.525,113.959],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"arm 1 b Outlines","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[298.53,311.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.21,-0.14],[0.81,-0.52],[0.18,-0.11],[3.64,-4.45],[-0.57,-1.66],[0,0],[-11.24,5.42],[2.11,2.91],[9.76,-6.85],[0,0],[0,0],[0,0],[0,0],[-0.18,-0.12],[-7.39,0.98],[-5.52,3.52]],"o":[[0,0],[-0.34,0.23],[-0.16,0.11],[-5.11,3.4],[-4.25,5.21],[0.07,0.2],[0,0],[13.11,-6.37],[-3.73,-5.17],[-1.24,1.16],[0,0],[0,0],[0,0],[0,0],[1.32,0.84],[6.98,-0.92],[0,0]],"v":[[8.4,-5.74],[8.08,-5.53],[6.32,-4.38],[5.81,-4.05],[-14.14,11.49],[-15.44,26.3],[-15.33,26.61],[21.45,4.8],[27.14,-16.96],[4.65,-19.76],[2.56,-17.94],[-0.8,-15.88],[-6.25,-12.53],[-34.56,4.87],[-34.28,5.06],[-19.71,8.31],[5.81,-4.05]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[909.989,157.62],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-7.56,19.5]],"o":[[-8.34,20.87],[0,0]],"v":[[-11.015,-18.35],[19.355,-1.15]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[714.004,292.46],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.47,11.35],[-7.47,-11.35]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[876.449,178.18],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-5.77,3.6],[-3.19,1.98]],"o":[[0,0],[6.47,-4.02],[3.59,-2.22],[0,0]],"v":[[-21.9,-11.83],[-6.76,11.83],[11.71,0.35],[21.9,-5.97]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[872.649,189.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.38,-0.97]],"o":[[-2.16,1.13],[0,0]],"v":[[2.725,-1.675],[-2.725,1.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[906.464,143.415],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[4.96,-3.12],[2.97,-5.29]],"o":[[0,0],[0,0],[-48.47,28.52],[-4.95,3.12],[0,0]],"v":[[86.36,-55.715],[79.63,-51.565],[61.4,-40.335],[-69.66,39.805],[-86.36,55.715]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[789.349,218.395],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-39.18,24.37]],"o":[[2.16,-7.6],[0,0],[0,0]],"v":[[-66.265,44.795],[-33.455,17.785],[66.265,-44.795]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[799.624,246.515],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.45,1.03],[0,0],[-0.18,-0.12]],"v":[[-14.155,8.605],[14.155,-8.795],[11.825,-7.035],[-13.875,8.795]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[889.584,153.885],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[11.13,15.12],[6.13,-3.2],[0,0],[-1.24,1.16],[-3.73,-5.17],[13.11,-6.37],[0,0],[0.07,0.2]],"o":[[0,0],[-4.16,-7.4],[0,0],[0,0],[9.76,-6.85],[2.11,2.91],[-11.24,5.42],[0,0],[15.06,-9.34]],"v":[[0.16,10.7],[8.12,-13.96],[-10.36,-15.88],[-7,-17.94],[-4.91,-19.76],[17.58,-16.96],[11.89,4.8],[-24.89,26.61],[-25,26.3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[919.549,157.62],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.11,3.4],[6.98,-0.92],[1.32,0.84],[0,0],[-1.45,1.03],[0,0],[-4.16,-7.4],[0,0],[15.06,-9.34],[-4.25,5.21]],"o":[[-5.52,3.52],[-7.39,0.98],[0,0],[0,0],[0,0],[6.13,-3.2],[11.13,15.12],[0,0],[-0.57,-1.66],[3.64,-4.45]],"v":[[8.545,-6.52],[-16.975,5.84],[-31.545,2.59],[-5.845,-13.24],[-3.515,-15],[1.935,-18.35],[20.415,-16.43],[12.455,8.23],[-12.705,23.83],[-11.405,9.02]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[907.254,160.09],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-48.47,28.52],[0,0],[0,0],[2.16,-7.6],[-8.34,20.87],[-4.95,3.12]],"o":[[0,0],[-39.18,24.37],[0,0],[-7.56,19.5],[2.97,-5.29],[4.96,-3.12]],"v":[[70.48,-66.375],[85.62,-42.715],[-14.1,19.865],[-46.91,46.875],[-77.28,29.675],[-60.58,13.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[780.269,244.435],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[6.47,-4.02],[0,0],[0,0]],"o":[[0,0],[-5.77,3.6],[0,0],[0,0],[0,0]],"v":[[16.365,5.255],[16.805,5.965],[-1.665,17.445],[-16.805,-6.215],[1.425,-17.445]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.235294132607,0.450980422076,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[867.554,184.275],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.52,3.52],[3.64,-4.45],[-0.57,-1.66],[3.59,-2.22],[0,0],[0,0],[0,0],[-7.39,0.98]],"o":[[-5.11,3.4],[-4.25,5.21],[-3.19,1.98],[0,0],[0,0],[0,0],[1.32,0.84],[6.98,-0.92]],"v":[[23.41,-18.335],[3.46,-2.795],[2.16,12.015],[-8.03,18.335],[-8.47,17.625],[-23.41,-5.075],[-16.68,-9.225],[-2.11,-5.975]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.235294132607,0.450980422076,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[892.389,171.905],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"bowtie main Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[137.53,113.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.242,-9.015],[-4.773,-7.955],[-4.242,6.363],[3.712,8.484]],"o":[[-4.242,9.015],[4.773,7.954],[4.242,-6.363],[-3.712,-8.485]],"v":[[-11.268,-11.401],[-11.268,12.462],[11.533,12.992],[12.329,-11.666]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.470588265213,0.019607843137,0.019607843137,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[877.95,481.052],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[25.848,11.048],[-0.8,-0.381],[-2.496,8.679],[-0.771,-0.387],[-9.893,6.974],[-19.633,-37.192]],"o":[[0,0],[-28.422,-12.148],[0,0],[2.532,-8.807],[0,0],[9.894,-6.973],[7.972,15.101]],"v":[[40.384,23.093],[-25.214,32.975],[-31.406,5.761],[-35.599,-11.037],[-19.301,-17.834],[-18.775,-37.05],[45.664,5.018]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.470588265213,0.019607843137,0.019607843137,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[827.939,470.062],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"bowtie OL Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[137.53,113.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-27.35,2.729],[0.859,-0.12]],"o":[[-1.783,6.781],[0,0],[30.074,-3],[0,0]],"v":[[-45.604,-20.71],[-40.93,-10.215],[17.313,17.98],[31.099,-5.426]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.470588265213,0.019607843137,0.019607843137,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[908.755,488.141],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"body Outlines","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[144.53,89.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.236],[7.029,0],[0,7.236],[-7.029,0]],"o":[[0,7.236],[-7.029,0],[0,-7.236],[7.029,0]],"v":[[12.727,0],[0,13.101],[-12.727,0],[0,-13.101]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[846.796,649.659],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[27.575,-1.06],[39.241,-58.862],[0,0],[18.559,0.53],[0,0]],"o":[[-9.545,48.786],[61.513,-37.12],[0,0],[12.726,-11.666],[0,0]],"v":[[5.966,-70.661],[-51.57,71.72],[43.086,-28.768],[12.86,-37.253],[51.57,-47.859]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568627,0.392156892664,0.749019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[900.752,561.391],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[25.454,6.363],[0,0],[-13.257,-4.242],[0,0],[-27.575,-68.937]],"o":[[-23.332,9.545],[0,0],[-11.666,3.712],[0,0],[5.303,-30.757]],"v":[[8.219,-73.975],[-33.673,-43.749],[-3.447,-39.507],[-29.431,-25.719],[25.188,73.974]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568627,0.392156892664,0.749019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[823.729,559.402],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-6.989,2.263]],"o":[[0,0],[0,0],[6.11,-0.264],[0,0]],"v":[[-1.027,-21.953],[-8.549,-21.608],[-9.838,21.953],[9.838,18.328]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[885.769,488.549],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.637,3.928],[0,0],[0,0],[0,0]],"o":[[-19.62,-10.075],[0,0],[0,0],[6.06,-1.963]],"v":[[14.302,8.898],[-9.958,-16.158],[-14.302,-20.14],[-3.436,20.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[899.044,486.737],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-18.316,-4.7],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.552,-19.538],[-18.521,4.855],[10.544,20.459],[18.521,-20.459]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[845.696,487.996],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7.262,0.313],[0,0]],"o":[[0,0],[5.831,1.496],[0,0],[0,0]],"v":[[-2.512,-21.341],[-10.49,19.577],[9.202,21.624],[10.491,-21.936]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[866.73,488.878],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.085,4.265],[7.909,0.176],[0,0],[-7.098,3.029]],"o":[[-1.962,0.097],[0,0],[6.609,-0.956],[0.293,-13.519]],"v":[[6.836,-19.572],[-13.953,-20.192],[-6.994,20.192],[13.659,14.389]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[893.493,508.271],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.252,0.143],[0,0],[-8.447,1.223],[0,0]],"o":[[0,0],[6.939,0.88],[0,0],[-5.282,-0.117]],"v":[[-4.076,-20.348],[-11.633,19.787],[11.633,19.639],[4.674,-20.745]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[874.868,508.824],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-16.803,-2.13],[0,0]],"o":[[0,0],[0,0],[0,0],[-9.229,-0.251]],"v":[[-2.369,-20.494],[-17.795,12.19],[10.239,20.494],[17.795,-19.641]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[852.996,508.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-6.989,2.263]],"o":[[0,0],[0,0],[6.11,-0.264],[0,0]],"v":[[-1.027,-21.953],[-8.549,-21.608],[-9.838,21.953],[9.838,18.328]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[885.504,526.423],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.637,3.928],[0,0],[0,0],[0,0]],"o":[[-13.257,-4.772],[0,0],[0,0],[6.061,-1.962]],"v":[[14.965,11.812],[2.238,-20.535],[-14.965,-19.746],[-4.099,20.535]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[899.442,524.216],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-18.316,-4.7],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.552,-19.538],[-18.521,4.855],[10.544,20.459],[18.521,-20.459]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[845.431,525.87],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":3,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7.262,0.314],[0,0]],"o":[[0,0],[5.831,1.496],[0,0],[0,0]],"v":[[-2.513,-21.341],[-10.491,19.577],[9.201,21.623],[10.49,-21.937]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[866.465,526.752],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":3,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[19.185,3.895],[17.567,-37.267],[0,0]],"o":[[0,0],[-2.303,18.353],[0,0],[0,0]],"v":[[32.215,-46.021],[-6.354,-53.937],[-32.214,53.407],[-31.685,53.937]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.235294132607,0.450980422076,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[881.132,577.848],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":3,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.586,-0.195],[0,0],[-2.303,18.354]],"o":[[0,0],[17.567,-37.266],[-18.496,-3.755]],"v":[[-18.697,-57.703],[-6.898,57.898],[18.698,-50.506]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.235294132607,0.450980422076,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[856.081,574.417],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":3,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.325,-56.011],[61.242,-63.131],[0,0],[-21.136,-95.205],[0,0]],"o":[[1.233,60.226],[66.401,17.452],[0,0],[68.406,-66.816],[0,0]],"v":[[-22.688,-99.111],[-115.379,98.318],[18.147,49.079],[46.972,155.121],[102.158,-89.141]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[823.346,627.574],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":3,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-84.845,21.741],[0,0]],"o":[[0,0],[-9.545,-33.938],[0,0]],"v":[[-61.513,-3.712],[61.512,33.408],[29.165,-55.149]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[833.083,660.319],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":3,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-84.845,21.741],[0,0]],"o":[[0,0],[-9.545,-33.938],[0,0]],"v":[[-61.512,-3.712],[61.513,33.408],[29.166,-55.149]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[828.311,683.651],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":3,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-84.845,21.741],[0,0]],"o":[[0,0],[-9.545,-33.938],[0,0]],"v":[[-61.513,-3.712],[61.512,33.408],[29.165,-55.149]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[820.737,707.104],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":3,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"arm 1 a Outlines","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[205.53,36.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.01,0.02],[10.78,-13.79]],"o":[[0.01,-0.02],[7.37,-17.08],[0,0]],"v":[[11.315,15.68],[11.335,15.63],[-18.705,-1.89]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[722.174,275.22],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.22,-0.36],[-3.9,-12.72],[-9.39,-15.08],[-5.62,-11.22],[10,36.66],[0,0],[8.55,23.77],[-3.54,7.32]],"o":[[-0.23,0.34],[-4.24,6.86],[0,0],[8.35,22.27],[5.63,11.22],[-6.17,-14.33],[0,0],[-5.72,-15.9],[0,0]],"v":[[-58.51,-156.02],[-59.18,-154.97],[-62.08,-125.78],[22.9,104.29],[37.96,144.8],[55.98,112.97],[41.7,77.59],[-25.08,-105.5],[-29.15,-137.4]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[762.639,428.3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.33,0.53]],"o":[[0.26,-0.54],[0,0]],"v":[[-0.44,0.805],[0.44,-0.805]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[733.949,290.045],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.17,-14.33],[5.63,11.22],[8.35,22.27],[0,0],[-4.24,6.86],[0,0],[7.37,-17.08],[0.01,-0.02],[-5.72,-15.9],[0,0]],"o":[[10,36.66],[-5.62,-11.22],[-9.39,-15.08],[-3.9,-12.72],[0,0],[10.78,-13.79],[-0.01,0.02],[-3.54,7.32],[8.55,23.77],[0,0]],"v":[[55.98,119.34],[37.96,151.17],[22.9,110.66],[-62.08,-119.41],[-59.18,-148.6],[-59.17,-148.6],[-29.13,-131.08],[-29.15,-131.03],[-25.08,-99.13],[41.7,83.96]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[762.639,421.93],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":17,"ty":0,"nm":"head comp","parent":2,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[164,124,0],"ix":2,"l":2},"a":{"a":0,"k":[966,543.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"bowtie UL Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[137.53,113.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-27.35,2.728],[0.859,-0.121],[-0.23,8.763],[0.833,-0.134],[7.17,9.331],[29.256,-28.747]],"o":[[0,0],[30.074,-3],[0,0],[0.232,-8.892],[0,0],[-7.169,-9.33],[-11.879,11.673]],"v":[[-38.419,8.467],[19.824,36.664],[33.61,13.256],[42.467,-1.084],[29.274,-12.112],[34.442,-30.062],[-38.019,-9.807]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.470588265213,0.019607843137,0.019607843137,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[906.244,469.458],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":19,"ty":0,"nm":"hat all comp","parent":7,"refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-2,-70,0],"ix":2,"l":2},"a":{"a":0,"k":[966,543.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"arm 2 Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[106.53,69.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.332,-5.359],[9.05,3.298],[9.71,10.883],[0,0],[0,0],[-17.303,-21.917],[-3.285,-1.932]],"o":[[0,0],[-2.516,1.923],[-6.912,-3.616],[-17.102,-20.681],[0,0],[0,0],[2.955,3.743],[9.98,5.868]],"v":[[63.769,66.125],[60.916,77.854],[47.27,79.31],[22.84,58.58],[-66.248,-66.301],[-47.555,-82.607],[44.316,49.035],[53.851,57.401]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[963.686,595.742],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0}]},{"id":"comp_2","nm":"head comp","fr":24,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"eye1 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[882,317.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"eye1 line Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[133.53,276.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.931],[12.639,0],[0,7.931],[-12.639,0]],"o":[[0,7.931],[-12.639,0],[0,-7.931],[12.639,0]],"v":[[22.885,0],[0,14.361],[-22.885,0],[0,-14.361]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[881.778,318.379],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"lid1 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[884,305.351,0],"to":[0,-1.417,0],"ti":[0,1.417,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":33,"s":[884,296.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[884,296.851,0],"to":[0,1.417,0],"ti":[0,-1.417,0]},{"t":68,"s":[884,305.351,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"lid2 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[883,330.351,0],"to":[0,1.583,0],"ti":[0,-1.583,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":33,"s":[883,339.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[883,339.851,0],"to":[0,-1.583,0],"ti":[0,1.583,0]},{"t":68,"s":[883,330.351,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"eye1 mask Outlines 3","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[965.53,543.11,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.931],[12.639,0],[0,7.931],[-12.639,0]],"o":[[0,7.931],[-12.639,0],[0,-7.931],[12.639,0]],"v":[[22.885,0],[0,14.361],[-22.885,0],[0,-14.361]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[881.778,318.379],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"lid1 Outlines","parent":3,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[131.53,297.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[912.249,303.77],[912.249,288.04]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.07,8.97],[0.07,-8.97]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[856.169,297.01],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[912.249,288.04],[856.239,288.04]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-14.9,-0.97]],"o":[[16.14,-2.68],[0,0]],"v":[[-28.075,1.59],[28.075,-0.62]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[884.174,304.39],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[16.14,-2.68],[0,0]],"o":[[0,0],[-14.9,-0.97],[0,0],[0,0]],"v":[[28.075,-8.97],[28.075,6.76],[-28.075,8.97],[-27.935,-8.97]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[884.174,297.01],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"eye1 mask Outlines","parent":1,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[133.53,276.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.931],[12.639,0],[0,7.931],[-12.639,0]],"o":[[0,7.931],[-12.639,0],[0,-7.931],[12.639,0]],"v":[[22.885,0],[0,14.361],[-22.885,0],[0,-14.361]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[881.778,318.379],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"lid2 Outlines","parent":4,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[132.53,254.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[857.199,331.23],[857.199,345.16]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.275,-7.655],[0.275,7.655]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[910.734,337.505],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[911.009,345.16],[857.199,345.16]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-18.19,4.45]],"o":[[17.34,3.32],[0,0]],"v":[[-26.63,-0.97],[26.63,-2.35]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[883.829,332.2],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-18.19,4.45],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[17.34,3.32]],"v":[[26.355,-7.655],[26.905,7.655],[-26.905,7.655],[-26.905,-6.275]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[884.104,337.505],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":9,"ty":3,"nm":"eyes2 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[887,353.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"eyes2 line Outlines","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[128.53,240.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-10.564],[-15.186,0],[0.66,11.554],[11.401,0.265]],"o":[[-7.422,0],[0,7.559],[15.186,0],[0,0],[-11.401,-0.265]],"v":[[-12.699,-16.194],[-26.081,-1.303],[-0.661,16.194],[25.421,-1.963],[11.775,-14.716]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[864.717,353.521],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[7.662,5.572]],"o":[[-12.475,-5.197],[0,0]],"v":[[17.574,7.895],[-17.574,-7.895]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[907.711,359.453],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.62,-0.33],[-17.13,-0.5],[-6.19,1.62],[0,-15.19],[2.821,-0.517]],"o":[[0,0],[2.56,0.18],[13.82,0.41],[0,0],[0,11.821],[0,0]],"v":[[-46.715,-13.847],[-39.455,-14.837],[-2.655,-12.857],[31.195,-14.177],[46.715,0.353],[37.521,15.167]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[887.334,351.867],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0.461,-1.103],[0,0]],"v":[[-0.456,0.865],[0.456,-0.865]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[884.222,339.964],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":11,"ty":3,"nm":"lid3 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[885,338.851,0],"to":[0,-1.333,0],"ti":[0,1.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":33,"s":[885,330.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[885,330.851,0],"to":[0,1.333,0],"ti":[0,-1.333,0]},{"t":68,"s":[885,338.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":3,"nm":"lid4 peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[884,372.351,0],"to":[0,1.917,0],"ti":[0,-1.917,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":33,"s":[884,383.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[884,383.851,0],"to":[0,-1.917,0],"ti":[0,1.917,0]},{"t":68,"s":[884,372.351,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"eyes2 mask Outlines 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[965.53,543.11,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[15.18,0],[0,7.56],[-7.42,0],[-11.4,-0.26]],"o":[[0.66,11.55],[-15.19,0],[0,-10.57],[0,0],[11.4,0.27]],"v":[[25.42,-1.965],[-0.66,16.195],[-26.08,-1.305],[-12.7,-16.195],[11.77,-14.725]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[864.719,353.525],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-15.19],[2.82,-0.51],[0,0],[7.56,5.5],[11.4,0.27],[0,0],[-13.03,-0.38],[-6.19,1.62]],"o":[[0,11.82],[0,0],[-12.38,-5.13],[0,0],[-11.4,-0.26],[6.61,0.46],[13.82,0.41],[0,0]],"v":[[41.015,0.13],[31.825,14.94],[31.775,15.06],[-2.895,-0.53],[-16.545,-13.29],[-41.015,-14.76],[-8.355,-13.08],[25.495,-14.4]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[893.034,352.09],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"lid3 Outlines","parent":11,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[130.53,263.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.21,-7.52],[0.21,7.52]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[936.739,328.26],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-0.35,-6.965],[0.35,6.965]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[834.509,327.705],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[936.529,320.74],[834.159,320.74]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-12.57,3.72]],"o":[[4.61,2.63],[0,0]],"v":[[-51.045,-2.415],[51.045,-1.305]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[885.904,337.085],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[4.61,2.63],[0,0]],"o":[[0,0],[-12.57,3.72],[0,0],[0,0]],"v":[[50.975,-9.38],[51.395,5.66],[-50.695,4.55],[-51.395,-9.38]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[885.554,330.12],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"eyes2 mask Outlines","parent":9,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[128.53,240.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[15.18,0],[0,7.56],[-7.42,0],[-11.4,-0.26]],"o":[[0.66,11.55],[-15.19,0],[0,-10.57],[0,0],[11.4,0.27]],"v":[[25.42,-1.965],[-0.66,16.195],[-26.08,-1.305],[-12.7,-16.195],[11.77,-14.725]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[864.719,353.525],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-15.19],[2.82,-0.51],[0,0],[7.56,5.5],[11.4,0.27],[0,0],[-13.03,-0.38],[-6.19,1.62]],"o":[[0,11.82],[0,0],[-12.38,-5.13],[0,0],[-11.4,-0.26],[6.61,0.46],[13.82,0.41],[0,0]],"v":[[41.015,0.13],[31.825,14.94],[31.775,15.06],[-2.895,-0.53],[-16.545,-13.29],[-41.015,-14.76],[-8.355,-13.08],[25.495,-14.4]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[893.034,352.09],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"lid4 Outlines","parent":12,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[131.53,210.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[935.299,371.24],[935.299,393.04]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[833.059,370],[833.059,393.04]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[25.52,2.41]],"o":[[-25.25,1.79],[0,0]],"v":[[51.12,-0.275],[-51.12,-1.515]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[884.179,371.515],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[833.059,393.04],[935.299,393.04]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-25.25,1.79],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[25.52,2.41]],"v":[[51.12,-10.28],[51.12,11.52],[-51.12,11.52],[-51.12,-11.52]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[884.179,381.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":17,"ty":3,"nm":"head peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[852,470.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"head Outlines","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163.53,123.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.544,0],[1.453,-5.983],[0,0],[0,0],[-4.263,0],[0,7.543]],"o":[[-6.43,0],[0,0],[0,0],[2.505,3.06],[7.544,0],[0,-7.544]],"v":[[-0.2,-13.66],[-13.46,-3.228],[-2.757,1.665],[-10.773,8.646],[-0.2,13.66],[13.46,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[876.347,352.424],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.014,0],[1.158,-4.769],[0,0],[0,0],[-3.398,0],[0,6.013]],"o":[[-5.125,0],[0,0],[0,0],[1.997,2.439],[6.014,0],[0,-6.014]],"v":[[-0.159,-10.889],[-10.729,-2.574],[-2.198,1.327],[-8.588,6.892],[-0.159,10.889],[10.729,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[893.196,318.379],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.268,0],[1.4,-5.764],[0,0],[0,0],[-4.107,0],[0,7.268]],"o":[[-6.194,0],[0,0],[0,0],[2.413,2.948],[7.268,0],[0,-7.268]],"v":[[-0.193,-13.16],[-12.968,-3.11],[-2.657,1.603],[-10.379,8.329],[-0.193,13.16],[12.967,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[921.078,351.558],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-10.564],[-15.186,0],[0.66,11.554],[11.401,0.265]],"o":[[-7.422,0],[0,7.559],[15.186,0],[0,0],[-11.401,-0.265]],"v":[[-12.699,-16.194],[-26.081,-1.303],[-0.661,16.194],[25.421,-1.963],[11.775,-14.716]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[864.717,353.521],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-24.76,10.235]],"o":[[0,0],[0,0]],"v":[[-28.232,-5.364],[28.232,-4.872]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[888.56,409.563],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[18.157,-0.661]],"o":[[0,0],[0,0]],"v":[[14.031,-8.089],[-14.031,8.089]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[804.467,355.684],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[25.09,-11.885]],"o":[[0,0],[0,0]],"v":[[11.555,-9.739],[-12.545,9.739]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[803.642,335.216],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.981,-3.631]],"o":[[0.33,9.904],[0,0]],"v":[[13.371,-11.39],[-13.701,11.39]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[802.486,314.417],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[17.497,-13.536]],"o":[[0,0],[0,0]],"v":[[22.449,4.457],[-22.449,6.768]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[801.661,277.772],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[16.506,-4.292]],"o":[[0,0],[0,0]],"v":[[12.875,6.107],[-12.875,-1.815]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[839.627,262.917],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[31.362,0.33]],"o":[[0,0],[0,0]],"v":[[22.449,11.059],[-22.449,-11.059]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[864.717,259.285],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[36.645,1.98]],"o":[[0,0],[0,0]],"v":[[22.119,15.351],[-22.119,-15.351]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[884.194,253.013],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.31,2.311]],"o":[[0,0],[0,0]],"v":[[-1.735,3.386],[1.735,-3.386]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[898.305,303.443],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.66,1.981]],"o":[[0,0],[0,0]],"v":[[0,4.545],[-0.33,-4.545]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[885.515,299.32],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.301,1.981]],"o":[[0,0],[0,0]],"v":[[1.815,4.559],[-1.816,-4.559]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[871.485,300.324],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.971,1.32]],"o":[[0,0],[0,0]],"v":[[2.971,3.961],[-2.971,-3.961]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[861.415,304.678],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.931],[12.639,0],[0,7.931],[-12.639,0]],"o":[[0,7.931],[-12.639,0],[0,-7.931],[12.639,0]],"v":[[22.885,0],[0,14.361],[-22.885,0],[0,-14.361]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[881.778,318.379],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":3,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-2.121,-6.363],[0,0]],"v":[[3.763,3.519],[-3.763,-3.519]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[889.433,371.079],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.778,0],[0,-2.971],[-22.449,0],[0.762,0.011],[0,7.593],[14.525,10.565]],"o":[[-3.611,-0.12],[-7.593,0],[0,2.971],[36.404,0],[0,0],[0,-11.555],[0,0]],"v":[[-23.944,-3.145],[-26.081,-3.301],[-35.984,5.943],[-12.875,17.827],[22.78,18.158],[35.984,11.555],[-19.477,-19.148]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[909.615,370.705],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":3,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.62,-0.33],[-17.13,-0.5],[-6.19,1.62],[0,-15.19],[0,0],[15.11,7.16],[0,0]],"o":[[0,0],[2.56,0.18],[13.82,0.41],[0,0],[0,15.18],[0,0],[-23.98,-11.84],[0,0]],"v":[[-46.715,-16.04],[-39.455,-17.03],[-2.655,-15.05],[31.195,-16.37],[46.715,-1.84],[36.205,13.11],[11.745,10.2],[-2.655,-14.96]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[887.334,354.06],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-15.19],[0,0],[15.11,7.16],[0,0],[0,0],[-6.19,1.62]],"o":[[0,15.18],[0,0],[-23.98,-11.84],[0,0],[13.82,0.41],[0,0]],"v":[[29.475,-2.005],[18.965,12.945],[-5.495,10.035],[-19.895,-15.125],[-19.895,-15.215],[13.955,-16.535]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[904.574,354.225],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":2,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4.952,0],[2.972,-3.961],[9.904,0.33],[2.311,-0.99],[-25.751,-0.66],[-4.952,5.282]],"o":[[-2.917,-1.856],[-4.952,0],[0,0],[-9.904,-0.33],[0,0],[13.866,0],[0,0]],"v":[[28.676,-4.312],[17.277,-12.875],[5.062,-5.282],[-8.473,-13.865],[-28.941,-4.953],[3.742,14.195],[28.941,-2.456]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705942191,0.552941176471,0.996078491211,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[887.852,408.341],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":3,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[6.086,-16.704],[0,0],[0,0],[0,0],[0,0],[-1.321,23.109],[-5.282,23.77],[-16.506,7.263],[-42.917,-7.263],[0,0],[0.66,-19.808],[5.282,-14.525],[15.846,12.876],[19.808,-25.75],[0,-17.827],[0,0]],"o":[[2.641,13.866],[-7.34,20.143],[10.738,-4.375],[-6.929,8.73],[9.904,0],[-38.296,3.961],[1.32,-23.109],[5.282,-23.769],[16.507,-7.263],[56.123,9.244],[0,0],[-0.66,19.808],[-3.962,-5.282],[-20.799,15.847],[-17.827,19.808],[0,17.827],[0,0]],"v":[[-40.936,47.041],[-29.381,95.241],[-56.607,107.033],[-42.917,91.939],[-60.745,95.241],[-49.519,78.735],[-71.308,10.066],[-85.174,-41.434],[-37.635,-70.486],[34.333,-108.121],[75.271,-55.3],[87.815,-33.512],[64.706,8.746],[59.755,-50.678],[-21.458,-36.812],[-24.43,24.592],[-49.19,48.361]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.819607902976,0.501960784314,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[853.822,328.946],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":3,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-9.574,0],[-2.963,1.261],[0,2.942],[0,0],[0,0],[2.121,14.848],[28.635,0.531],[4.773,-27.574],[-9.545,-22.272],[-3.182,-18.56],[-29.165,3.712],[0,0]],"o":[[3.631,6.603],[4.515,0],[12.633,-5.373],[0,0],[0,0],[0,0],[-2.121,-14.848],[-28.636,-0.53],[-4.772,27.575],[9.546,22.272],[3.182,18.559],[22.272,-7.955],[0,0]],"v":[[5.827,65.623],[29.266,74.206],[40.403,72.183],[53.036,49.446],[53.036,23.366],[54.499,-29.747],[62.839,-77.156],[18.296,-116.397],[-53.823,-75.035],[-55.414,27.84],[-31.552,98.368],[10.341,110.034],[45.87,68.937]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[864.03,367.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":3,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0}]},{"id":"comp_3","nm":"hat all comp","fr":24,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"hat peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1146,639.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"hat Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-130.47,-45.39,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-51.397,-2.254],[-35.167,1.804],[-4.208,-12.624],[11.722,6.312],[51.998,-27.952],[17.785,7.808]],"o":[[0,0],[32.912,-1.804],[35.166,-1.803],[4.207,-12.924],[-13.358,-7.193],[-37.42,19.387],[-24.646,-10.82]],"v":[[-105.498,-7.89],[-64.02,31.334],[55.906,-11.948],[111.21,12.849],[99.187,-19.612],[-2.705,-3.382],[-84.158,16.756]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1138.248,524.199],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.807,1.723],[4.208,-22.242],[-22.843,4.809],[0.013,19.208]],"o":[[1.589,15.834],[32.461,3.005],[-3.388,-28.24],[-48.151,3.419]],"v":[[-54.959,-36.339],[-55.905,33.864],[55.905,32.06],[52.299,-36.868]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1146.664,605.978],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-48.151,3.419],[0,1.308],[-1.202,2.404],[0,0],[-2.062,-20.539]],"o":[[-0.001,-1.235],[0,-43.882],[-17.733,-14.427],[0,0],[22.807,1.723]],"v":[[52.901,35.361],[52.899,31.552],[58.91,-24.353],[-58.911,12.917],[-54.358,35.891]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.470588265213,0.019607843137,0.019607843137,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1146.063,533.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.601,11.421],[0,0],[0,0],[0,0],[-15.177,1.124]],"o":[[-0.601,-11.421],[0,0],[0,0],[15.154,3.966],[24.346,-1.803]],"v":[[38.068,-4.47],[-13.629,-25.81],[-38.669,-17.148],[-38.669,18.529],[10.867,24.685]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1212.592,530.397],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"chains mask Outlines","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[965.53,543.11,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[100.29,-4.91],[-2.12,292.66]],"o":[[0,0],[-88.31,13.51],[-166.77,-119.19],[0,0]],"v":[[318.54,-308.751],[318.54,251.479],[30.15,275.149],[-316.42,-308.751]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1019.409,275.15],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"chains comp","tt":1,"refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[966,543.5,0],"ix":2,"l":2},"a":{"a":0,"k":[966,543.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"hat UL Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-130.47,-45.39,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-29.455,7.514],[-24.346,1.803],[0.601,11.422],[0,0],[0,0],[15.63,5.11],[9.294,-10.223],[-13.225,-16.831]],"o":[[11.722,5.41],[24.346,-1.803],[-0.601,-11.421],[0,0],[0,0],[-15.629,-5.109],[-9.017,9.919],[12.464,15.863]],"v":[[12.624,16.232],[83.407,29.458],[110.608,0.302],[58.911,-21.037],[11.121,-4.506],[-55.304,-26.147],[-100.99,-21.037],[-97.984,14.729]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1140.052,525.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"hat hand peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1018,664.851,0],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":69,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"hat hand Outlines","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-2.47,-70.39,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.064,0.011],[-0.026,-0.03]],"o":[[0.026,0.03],[0.044,-0.054]],"v":[[-0.062,-0.044],[0.018,0.044]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1169.64,657.822],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.461,-1.725],[2.924,-1.272],[7.556,0.795],[-12.329,2.386],[-2.371,0.328],[3.033,2.744],[0,0],[12.727,-12.726],[12.436,0.054],[1.703,0.037],[-16.675,-0.425],[-3.074,-0.072],[2.527,0.064],[1.48,-4.242],[0,0],[-7.954,4.243],[-8.484,0],[-12.328,2.254],[5.802,6.638],[0.026,0.03],[0,0],[-0.052,-0.008],[2.755,0.918],[7.556,-5.568],[-4.59,-1.53],[-2.023,-2.289],[0.044,-0.054],[-14.164,8.291]],"o":[[-2.371,0.328],[-12.329,2.386],[7.556,0.795],[2.924,-1.272],[1.443,-3.61],[-8.352,-7.557],[-42.157,0],[-8.648,8.649],[-1.542,-0.006],[1.707,4.333],[2.518,-0.187],[-3.071,0.204],[-16.871,1.248],[31.352,0.579],[0,0],[7.955,-4.242],[11.666,-0.663],[7.065,-3.042],[-0.027,-0.03],[-0.052,-0.008],[0,0],[-2.023,-2.289],[-4.59,-1.53],[7.556,-5.568],[2.755,0.918],[0.064,0.011],[13.697,0.367],[10.692,-4.678]],"v":[[68.484,-13.673],[60.522,-11.335],[24.728,-9.744],[60.522,-11.335],[68.484,-13.673],[67.681,-24.459],[2.456,-24.459],[-51.633,-1.393],[-80.266,8.505],[-85.135,8.433],[-61.322,18.948],[-52.958,18.759],[-61.322,18.948],[-84.721,30.905],[-28.566,31.485],[-12.127,27.773],[2.721,18.759],[23.932,27.773],[23.323,7.72],[23.242,7.632],[23.137,7.622],[23.242,7.632],[15.978,2.585],[-8.282,3.778],[15.978,2.585],[23.242,7.632],[23.323,7.72],[74.442,-0.995]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1146.401,650.213],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-16.87,1.248],[1.707,4.333],[4.238,0.057],[0,0],[0,0],[0,0],[-3.935,-0.073]],"o":[[-16.674,-0.425],[-3.439,-0.074],[0,0],[0,0],[0,0],[4.106,0.092],[1.48,-4.242]],"v":[[17.736,-0.6],[-6.077,-11.115],[-17.538,-11.357],[-17.737,11.112],[-17.648,10.612],[-17.737,11.112],[-5.663,11.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.235294132607,0.450980422076,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1067.299,669.856],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.789,0],[2.25,0.279],[0,0],[0,0],[0,0],[-0.954,-0.025],[-3.207,-0.072],[0,0]],"o":[[0,0],[-2.54,0],[0,0],[0,0],[0,0],[0.926,0.056],[3.271,0.085],[0,0],[0,0]],"v":[[6.242,-10.771],[1.204,-11.036],[-5.979,-11.47],[-5.955,-11.036],[-5.979,-11.47],[-6.375,11.099],[-3.568,11.236],[6.153,11.47],[6.375,-7.656]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.235294132607,0.450980422076,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1043.387,669.335],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.071,0.205],[2.519,-0.186]],"o":[[-3.074,-0.072],[2.527,0.065]],"v":[[4.182,-0.091],[-4.182,0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1089.195,668.996],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.929,8.298],[-3.661,-1.963],[0,0],[11.954,-9.011],[7.143,2.562]],"o":[[2.819,-6.529],[9.575,5.134],[0,0],[-6.987,-0.305],[-8.284,-2.972]],"v":[[-20.019,-4.573],[-8.329,-12.341],[10.39,-8.266],[9.994,14.303],[-10.531,11.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1027.018,666.131],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":69,"st":0,"ct":1,"bm":0}]},{"id":"comp_4","nm":"chains comp","fr":24,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"chain peg 12","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-27]},{"i":{"x":[0.659],"y":[1]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[-27]},{"i":{"x":[0.815],"y":[1]},"o":{"x":[0.425],"y":[0]},"t":43,"s":[-27]},{"t":45,"s":[-27]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":33,"s":[1150,620.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.659},"o":{"x":0.297,"y":0.297},"t":39,"s":[1150,620.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.425},"t":43,"s":[1150,620.851,0],"to":[0,0,0],"ti":[0,0,0]},{"t":45,"s":[1150,620.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"chain peg 11","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":30,"s":[-27]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-27]},{"i":{"x":[0.659],"y":[1]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[-58]},{"i":{"x":[0.815],"y":[1]},"o":{"x":[0.425],"y":[0]},"t":43,"s":[-58]},{"t":45,"s":[-58]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1129,577.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1145,529.851,0],"to":[0,0,0],"ti":[0.198,-39.381,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1144.637,602.079,0],"to":[-0.247,49.104,0],"ti":[0.092,-18.406,0]},{"t":45,"s":[1144,728.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"chain peg 10","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":27,"s":[-27]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[-27]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-26]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[-23]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[-26.992]},{"t":45,"s":[-34]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1105,535.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1106,501.851,0],"to":[0,0,0],"ti":[0.594,-39.974,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1104.911,575.168,0],"to":[-0.74,49.844,0],"ti":[0.277,-18.683,0]},{"t":45,"s":[1103,703.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"chain peg 9","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-27]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[-27]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[-26]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-5]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[-3]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[-12.436]},{"t":45,"s":[-29]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1088,495.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1093,460.851,0],"to":[0,0,0],"ti":[2.771,-40.568,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1087.919,535.257,0],"to":[-3.455,50.585,0],"ti":[1.295,-18.961,0]},{"t":45,"s":[1079,665.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":3,"nm":"chain peg 8","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-27]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[-26]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[22]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[22]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[19.097]},{"t":45,"s":[14]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1089,451.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1095,416.851,0],"to":[0,0,0],"ti":[6.333,-41.36,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1083.385,492.709,0],"to":[-7.896,51.572,0],"ti":[2.96,-19.331,0]},{"t":45,"s":[1063,625.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"chain peg 7","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-26]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[22]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[49]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[43]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[48.444]},{"t":45,"s":[58]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[-3.333,13.833,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1089,451.851,0],"to":[3.333,-13.833,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1108,412.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1114,376.851,0],"to":[0,0,0],"ti":[6.926,-41.558,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1101.297,453.072,0],"to":[-8.636,51.818,0],"ti":[3.237,-19.423,0]},{"t":45,"s":[1079,586.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":3,"nm":"chain peg 6","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[22]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[49]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[57]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[47]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[60.792]},{"t":45,"s":[85]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[-3.333,13.833,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1089,451.851,0],"to":[3.333,-13.833,0],"ti":[-9.333,11.5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1108,412.851,0],"to":[9.333,-11.5,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1145,382.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1148,344.851,0],"to":[0,0,0],"ti":[5.343,-43.734,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1138.2,425.064,0],"to":[-6.662,54.533,0],"ti":[2.497,-20.44,0]},{"t":45,"s":[1121,565.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"chain peg 5","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[22]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[49]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[57]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[37]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[28]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[40.703]},{"t":45,"s":[63]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[-3.333,13.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1089,451.851,0],"to":[3.333,-13.833,0],"ti":[-9.333,11.5,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1108,412.851,0],"to":[9.333,-11.5,0],"ti":[-12.5,9.167,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1145,382.851,0],"to":[12.5,-9.167,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1183,357.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1183,312.851,0],"to":[0,0,0],"ti":[2.968,-48.88,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1177.556,402.501,0],"to":[-3.701,60.948,0],"ti":[1.387,-22.845,0]},{"t":45,"s":[1168,559.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":3,"nm":"chain peg 4","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[49]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[57]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[37]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[7]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[0]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[5.807]},{"t":45,"s":[16]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[-3.333,13.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1089,451.851,0],"to":[3.333,-13.833,0],"ti":[-9.333,11.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1108,412.851,0],"to":[9.333,-11.5,0],"ti":[-12.5,9.167,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1145,382.851,0],"to":[12.5,-9.167,0],"ti":[-10.667,10,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1183,357.851,0],"to":[10.667,-10,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1209,322.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1204,274.851,0],"to":[0,0,0],"ti":[0,-52.046,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1204,370.308,0],"to":[0,64.896,0],"ti":[0,-24.325,0]},{"t":45,"s":[1204,537.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":3,"nm":"chain peg 3","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[49]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[57]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[37]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-15]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[-12]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[-22.525]},{"t":45,"s":[-41]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[-3.333,13.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1089,451.851,0],"to":[3.333,-13.833,0],"ti":[-9.333,11.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1108,412.851,0],"to":[9.333,-11.5,0],"ti":[-12.5,9.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1145,382.851,0],"to":[12.5,-9.167,0],"ti":[-10.667,10,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1183,357.851,0],"to":[10.667,-10,0],"ti":[-5.167,13,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1209,322.851,0],"to":[5.167,-13,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1214,279.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1205,231.851,0],"to":[0,0,0],"ti":[-0.989,-52.442,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1206.815,328.034,0],"to":[1.234,65.39,0],"ti":[-0.462,-24.51,0]},{"t":45,"s":[1210,496.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":3,"nm":"chain peg 2","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[49]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[57]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[37]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[-15]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-43]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[-24]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[-44.687]},{"t":45,"s":[-81]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[-3.333,13.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[1089,451.851,0],"to":[3.333,-13.833,0],"ti":[-9.333,11.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1108,412.851,0],"to":[9.333,-11.5,0],"ti":[-12.5,9.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1145,382.851,0],"to":[12.5,-9.167,0],"ti":[-10.667,10,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1183,357.851,0],"to":[10.667,-10,0],"ti":[-5.167,13,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1209,322.851,0],"to":[5.167,-13,0],"ti":[1.167,14,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1214,279.851,0],"to":[-1.167,-14,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1202,238.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1196,189.851,0],"to":[0,0,0],"ti":[2.771,-54.816,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1190.919,290.39,0],"to":[-3.455,68.351,0],"ti":[1.295,-25.62,0]},{"t":45,"s":[1182,466.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":3,"nm":"chain peg","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[-27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[-26]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[49]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[57]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[37]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[-15]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[-43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-64]},{"i":{"x":[0.659],"y":[0.273]},"o":{"x":[0.297],"y":[0]},"t":39,"s":[-38]},{"i":{"x":[0.815],"y":[0.903]},"o":{"x":[0.425],"y":[0.258]},"t":43,"s":[-64.857]},{"t":45,"s":[-112]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1150,620.851,0],"to":[-3.5,-7.167,0],"ti":[7.5,14.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[1129,577.851,0],"to":[-7.5,-14.167,0],"ti":[6.833,13.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[1105,535.851,0],"to":[-6.833,-13.667,0],"ti":[2.667,14,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[1088,495.851,0],"to":[-2.667,-14,0],"ti":[-3.333,13.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[1089,451.851,0],"to":[3.333,-13.833,0],"ti":[-9.333,11.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[1108,412.851,0],"to":[9.333,-11.5,0],"ti":[-12.5,9.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[1145,382.851,0],"to":[12.5,-9.167,0],"ti":[-10.667,10,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[1183,357.851,0],"to":[10.667,-10,0],"ti":[-5.167,13,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[1209,322.851,0],"to":[5.167,-13,0],"ti":[1.167,14,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[1214,279.851,0],"to":[-1.167,-14,0],"ti":[7.5,11.833,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[1202,238.851,0],"to":[-7.5,-11.833,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[1169,208.851,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.273},"o":{"x":0.297,"y":0},"t":39,"s":[1178,147.851,0],"to":[0,0,0],"ti":[8.312,-62.534,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.258},"t":43,"s":[1162.756,262.545,0],"to":[-10.364,77.974,0],"ti":[3.885,-29.227,0]},{"t":45,"s":[1136,463.851,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,51.351,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":46,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"chain Outlines 12","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"chain Outlines 11","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"chain Outlines 10","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"chain Outlines 9","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"chain Outlines 8","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"chain Outlines 7","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"chain Outlines 6","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"chain Outlines 5","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"chain Outlines 4","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"chain Outlines 3","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"chain Outlines 2","parent":11,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"chain Outlines","parent":12,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-99.47,283.61,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[12.068,0.316],[0,0],[0.234,-8.939],[0,0],[-5.422,-1.123],[-0.01,3.203],[0,0],[0,0],[-4.425,-0.116],[0.116,-4.425],[0,0],[0,0],[-6.638,-1.008],[-0.005,3.041]],"o":[[-0.014,-16.549],[0,0],[-16.091,-0.422],[0,0],[0.232,3.969],[6.389,1.4],[0.011,-3.203],[0,0],[0.116,-4.425],[4.425,0.116],[0,0],[-0.047,1.815],[0,0],[6.638,1.008],[0,0]],"v":[[22.284,-10.445],[2.561,-34.443],[2.226,-34.451],[-21.278,-12.255],[-22.284,23.59],[-15.666,33.473],[-7.575,24.328],[-7.552,17.702],[-7.162,-4.729],[1.094,-12.565],[8.929,-4.308],[8.514,18.82],[8.529,24.481],[14.805,32.677],[21.846,22.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1115.086,285.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":46,"st":0,"ct":1,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Expensify-Magic-Link-120822-kjs-1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[425.5,319,0],"ix":2,"l":2},"a":{"a":0,"k":[966,543.5,0],"ix":1,"l":2},"s":{"a":0,"k":[56,56,100],"ix":6,"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":69,"st":0,"ct":1,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/contributingGuides/CONTRIBUTING.md b/contributingGuides/CONTRIBUTING.md
index 900b80ba9030..5c51f16ffc4d 100644
--- a/contributingGuides/CONTRIBUTING.md
+++ b/contributingGuides/CONTRIBUTING.md
@@ -203,7 +203,6 @@ During communication with Expensify, you will come across a variety of acronyms
- **RBR:** Red Brick Road (UX Design Principle that utilizes red indicators on action items to encourage the user down the optimal path for handling and discovering errors)
- **VBA:** Verified Bank Account (Bank account that has been verified as real and belonging to the correct business/individual)
- **NAB:** Not a Blocker (An issue that doesn't block progress, but would be nice to not have)
-- **LHN:** Left Hand Navigation
- **IOU:** I owe you (used to describe payment requests between users)
- **OTP:** One-time password, or magic sign-in
- **RHP:** Right Hand Panel (on larger screens, pages are often displayed docked to the right side of the screen)
diff --git a/docs/_config.yml b/docs/_config.yml
index dc134d0d2c19..888f0b24a91e 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -4,6 +4,7 @@ description: Got a question about receipts, expenses, corporate cards, or anythi
url: https://help.expensify.com
author: Expensify
logo: /assets/images/expensify-help.svg
+repository: Expensify/App
open_url: true
defaults:
diff --git a/docs/_sass/_search-bar.scss b/docs/_sass/_search-bar.scss
index a5cc8ae2ff20..e9c56835af50 100644
--- a/docs/_sass/_search-bar.scss
+++ b/docs/_sass/_search-bar.scss
@@ -88,11 +88,14 @@ $color-gray-label: $color-gray-label;
/* All gsc id & class are Google Search relate gcse_0 is the search bar parent & gcse_1 is the search result list parent */
#___gcse_0 {
margin-left: 20px;
+ margin-top: -8px;
}
/* This input is in #___gcse_0 search bar */
input#gsc-i-id1.gsc-input {
background-color: $color-appBG;
+ padding: 15px 0px 0px !important;
+ pointer-events: auto;
color: #E7ECE9;
font-family: "ExpensifyNeue", "Segoe UI Emoji", "Noto Color Emoji" !important;
}
@@ -102,23 +105,29 @@ input#gsc-i-id1.gsc-input {
background-color: $color-appBG;
border-bottom: $color-borders 2px solid;
border-bottom-left-radius: 0px;
-
+ pointer-events: none;
+
&:focus-within {
border-bottom: $color-accent 2px solid;
}
}
.gsc-input-box .gsib_a {
- padding: 5px 9px 4px 0px;
+ padding: 0px 0px 4px 0px;
}
.search-icon {
margin-left: auto;
}
+.gsst_b, .gsst_a {
+ padding: 0px !important;
+}
/* This is the close icon on search bar */
.gsib_b .gsst_a .gscb_a {
color: $color-icons;
+ padding: 8px 6px 0px 6px !important;
+ pointer-events: auto;
&:hover {
color: $color-text;
@@ -148,6 +157,7 @@ label.search-label {
font-family: "ExpensifyNeue", "Segoe UI Emoji", "Noto Color Emoji";
transform: translateY(-50%);
left: 20px;
+ pointer-events: none;
color: $color-gray-label;
transform-origin: left top;
user-select: none;
@@ -181,7 +191,6 @@ label.search-label {
/* Change the Google Search Button icon into Expensify icon button */
.gsc-search-button.gsc-search-button-v2 {
padding: 10px;
- margin-top: -7px;
margin-left: 15px;
margin-right: 20px;
border-radius: 25px;
diff --git a/docs/articles/expensify-classic/account-settings/Account-Details.md b/docs/articles/expensify-classic/account-settings/Account-Details.md
index 46a6c6ba0c25..8f80a35f3525 100644
--- a/docs/articles/expensify-classic/account-settings/Account-Details.md
+++ b/docs/articles/expensify-classic/account-settings/Account-Details.md
@@ -1,5 +1,61 @@
---
title: Account Details
-description: Account Details
+description: The Account Details section of your account is where you can update your profile photo, enable 2FA, and change the email address associated with your Expensify account.
---
-## Resource Coming Soon!
+
+# Overview
+The Account Details section of your account is where you can update your profile photo, enable 2FA, and change the email address associated with your account.
+
+You can have multiple email addresses tied to your account to make it easier to submit expenses or manage your account. Let’s go over how to configure the various account settings located under the Account Details section of your Expensify account.
+
+# How to add a profile photo
+To update your name or add a profile photo, navigate to **Settings** > **Account** > **Account Details.** Under “your profile” you’ll notice a profile picture thumbnail, click “edit photo” underneath to update the profile image.
+
+# How to enable Two-Factor Authentication
+Setting up Two-factor Authentication is one of the best ways to secure your account. This can be enabled individually in your account settings by following **Settings** > **Accounts** > **Account Details** > **Two Factor Authentication** and toggle the switch to **Enabled.**
+
+Save or download your **Recovery Codes.** It’s important to keep these safe! You WILL lose access to your account if you cannot use your authenticator app and do not have your recovery codes.
+
+Use your favorite authenticator app to connect to Expensify using the QR code or click the link to enter the secret key manually.
+
+Once connected, quickly enter the code generated by your app into Expensify before the timeframe runs out!
+
+# How to manage your devices
+You can access your Expensify account on multiple devices, which allows for easy access to your account data. By heading to **Settings** > **Account** > **Account Details** > **Device Management**, you can review the devices that have access to your account.
+
+From that same place in your account, you can remove any devices that should no longer have access. To do this, select the **Revoke** button next to each device you wish to remove access to your account.
+
+# How to add a Secondary Login
+A Secondary Login is helpful if you have multiple email addresses and don’t necessarily need multiple Expensify accounts. By adding additional emails to your Expensify account, you can use them to forward receipts to receipts@expensify.com and they will be uploaded to your main Expensify account. To get this added to your account, follow these steps:
+
+1. Log in to your Expensify account through a web browser at www.expensify.com. Please note that this process cannot be completed using the mobile app; it must be done from the website at expensify.com.
+2. Navigate to **Settings** > **Account** > **Account Details**. Scroll down to find the 'Secondary Logins' section, then click the 'Add Secondary Login' button.
+3. Input the email address or mobile phone number you wish to add, ensuring you include the international code if applicable.
+4. You will receive a prompt to enter the Magic Code, which will be sent to the email address you're adding as a secondary login.
+
+# How to update your email address
+Once a Secondary Login is added to your account, you can make it your primary email address. The primary address on an Expensify account is the address that will receive email notifications and updates regarding the account. Any new email addresses must be added as a secondary login before they can be made a primary address.
+
+1. Log in to your Expensify account through a web browser at www.expensify.com. Please note that this process cannot be completed using the mobile app; it must be done from the website at expensify.com.
+2. Navigate to **Settings** > **Account** > **Account Details**. Scroll down to find the 'Secondary Logins' section, then select the **"Make Primary"** button next to the email address.
+3. You can keep the old address as a secondary login or delete email addresses by selecting the **"Remove"** button.
+
+
+# Deep Dive
+## Managing emails connected to other Expensify accounts
+A secondary login can only be added if it is not linked to an existing account. If you have two email addresses with Expensify accounts linked to them, you'll need to merge them instead.
+
+Alternatively, you can remove a personal email address from a previous work/organization account to use it elsewhere.
+
+Is your Secondary Login (personal email) validated in your company account? If so, do the following:
+1. Navigate to expensify.com
+2. Log in using your validated Secondary Login
+3. Navigate to **Account** > **Settings** > **Account Details** > **Secondary Logins**
+4. Remove your personal email address from the account by clicking the **"Remove"** button next to your email
+
+Is your Secondary Login (personal email) invalidated in your company account? If so, do the following:
+1. Navigate to expensify.com
+2. Enter your invalidated secondary login email address
+3. You will be presented with a confirmation message saying Expensify sent you an email with a validation link
+4. Head to your personal email account and follow the prompts
+5. You'll receive a link in the email to click that will unlink the two accounts
diff --git a/docs/articles/expensify-classic/billing-and-subscriptions/Billing-Owner.md b/docs/articles/expensify-classic/billing-and-subscriptions/Billing-Owner.md
index acb29d91e1d8..4fd7ef71c2e7 100644
--- a/docs/articles/expensify-classic/billing-and-subscriptions/Billing-Owner.md
+++ b/docs/articles/expensify-classic/billing-and-subscriptions/Billing-Owner.md
@@ -1,5 +1,49 @@
---
title: Billing-Owner
-description: Billing-Owner
+description: The Billing Owner is the person responsible for payment for all usage on a given Workspace
---
-## Resource Coming Soon!
\ No newline at end of file
+# Overview
+In Expensify, each Workspace has a Billing Owner. The Billing Owner is the person responsible for payment for all usage on a given Workspace. The Billing Owner is also a Workspace Admin, but it’s important to note that not all Workspace Admins are Billing Owners.
+# How to set a billing owner
+If you've just created a new Group Workspace, you first need to add a payment card to your account. You can do this by going to the web app's Home page and completing the payment card task. Alternatively, you can add a payment card directly from the Payments page (**Settings > Account > Payment**).
+- If you already own a Group Workspace subscription, you can edit your payment card details or manage subscription options within the web app under **Settings > Workspaces > Group > Subscription**.
+- If you're an individual Workspace owner, you can activate a new monthly subscription in the web app by going to **Settings > Workspaces > Individual > Subscription** section.
+# How to change the Billing Owner
+A Group Workspace's Billing Owner is typically the user who initially created the Workspace. However, any Workspace Admin can take over the role of Billing Owner by choosing to "Take Over Billing."
+Any Workspace Admin can take over the billing responsibility of a Group Workspace as long as they are already a member of that Workspace. If you wish to become the Billing Owner of a Workspace you're not currently a member of, you need to contact an existing Workspace Admin and ask them to add you to the Group Workspace.
+To take over billing:
+1. Go to **Settings > Workspaces > Group**.
+1. Click on the relevant Workspace name.
+1. Click on "Take Over Billing." If you haven't added a payment card to your settings yet, you'll be prompted to do so to complete the transfer.
+
+That's it! As the new Billing Owner, you will receive a monthly email receipt for the Group Workspaces you now own.
+# How to update payment details in Expensify
+If you're a policy billing owner, you can change your payment information like your payment card and billing currency. If you are a billing owner using the Expensify Card, your monthly company policy charges will be billed to your Expensify Card.
+
+To change your payment details:
+1. Log in to your account using a web browser or Android app (not available on iOS).
+1. Go to **Settings > Account > Payments**.
+1. To change your payment card, click "Change Payment Card" in the Payment Details section.
+1. To change your billing currency, click "Change Billing Currency" and choose a new currency. You'll need to enter the CVC code of your payment card. You can pay in USD, GBP, NZD, or AUD.
+# Deep Dive
+## Taking over an existing subscription
+If the previous Billing Owner had a 12-month subscription, it will be transferred to your Expensify account. If you already have an annual subscription, the sizes of both subscriptions will be combined. For example, if you have a subscription for 10 users and take over from someone with 50 users, your subscription will now cover 60 users. To take over the Annual Subscription, you need to transfer billing ownership of all Workspaces under the previous Billing Owner's name.
+
+## Taking over Consolidated Domain Billing
+If a Domain Admin has enabled Consolidated Domain Billing (**Settings > Domains > Domain Name > Domain Admins**), all Group Workspaces owned by users with email addresses matching the domain will be billed to the Consolidated Domain Billing owner. You can take over billing for the entire domain by following these steps:
+
+To take over billing for the entire domain, you must:
+1. Ensure you have a linked card on your **Settings > Account > Billing** page.
+1. Be designated as the Primary Domain Admin.
+1. Go to **Settings > Domains > _Domain Name_ > Domain Admins** and enable Consolidated Domain Billing.
+
+Currently, Consolidated Domain Billing simply consolidates the amounts due for each Group Workspace Billing Owner (listed on the **Settings > Workspaces > Group** page). If you want to use the Annual Subscription across all Workspaces on the domain, you must also be the Billing Owner of all Group Workspaces.
+# FAQ
+## Why can't I see the option to take over billing?
+There could be two reasons:
+1. You may not have the role of Workspace Admin. If you can't click on the Workspace name (if it's not a blue hyperlink), you're not a Workspace Admin. Another Workspace Admin for that Workspace must change your role before you can proceed.
+1. Your domain might have Consolidated Domain Billing enabled. Refer to the Deep Dive section to understand how to take over Consolidated Domain Billing.
+## What if the current Billing Owner is no longer an employee?
+There are two ways to resolve this:
+1. Have your IT dept. gain access to the account so that you can make yourself an admin. Your IT department may need to recreate the ex-employee's email address. Once your IT department has access to the employee's Home page, you can request a magic link to be sent to that email address to gain access to the account.
+1. Have another admin make you a Workspace admin.
diff --git a/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md b/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md
index 3f2e49952c4a..795a895e81f0 100644
--- a/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md
+++ b/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md
@@ -1,5 +1,42 @@
---
title: Expense Types
-description: Expense Types
+description: Details of the different Expense filters and Expense Types
---
-## Resource Coming Soon!
+
+# Overview
+Expense types help categorize different expenses for better financial management. While reimbursable and non-reimbursable expenses are common, Expensify offers various other options to suit your needs. Let's explore the available expense types.
+
+# How To
+## Filtering a Report by Expense Type
+Organizing a report by expense type can make it easier to review expenses on a report.
+- Open the report you're interested in.
+- Click the **Details** icon in the upper right corner of the report,
+- Change the “View” to **Detailed** and “Split by” **Reimbursable** or **Billable**.
+- You’ll also see the option to **Group by Category** or **Tags**.
+
+
+# Deep Dive
+Each report will show the total amount for all expenses in the upper right. Under that total, there will be a breakdown of amounts that are reimbursable, billable, and non-reimbursable (depending on which of those expense types exist on the report).
+
+## Expense Types
+- **Reimbursable Expenses:** Employees pay for these expenses out of their pockets on behalf of the business and are usually reimbursed. They often come from cash, debit cards, or personal credit card purchases.
+- **Non-reimbursable Expenses:** The business directly covers these expenses, so there's no need to reimburse the employee. Typically, these expenses are company card expenses.
+- **Billable Expenses:** Business or employee expenses must be billed to a specific client or vendor. Choose this option if you need to track expenses for invoicing to customers, clients, or other departments.
+- **Per Diem Expenses:** These expenses involve a daily or partial daily rate you can configure in your expense Workspace.
+- **Time Expenses:** Employees or jobs are billed based on an hourly rate that you can set within Expensify.
+- **Distance Expenses:** These expenses are related to travel for work.
+
+# FAQ
+
+## What’s the difference between a receipt, an expense, and a report attachment?
+
+- **Expense:** Created when you SmartScan or manually upload a receipt from a purchase.
+- **Receipt:** Automatically attached to the expense during the SmartScan process.
+- **Report Attachments:** Additional documents that need to be submitted to your approver (e.g., supplemental documents to the purchase) can be added to a report anytime by clicking the paperclip icon in the Reports Comments.
+
+## How are credits or refunds displayed in Expensify?
+In Expensify, a credit is displayed as an expense with a minus (ex. -$1.00) in front of it. That’s because Expensify defaults all expenses as something that needs to be paid by the company. So a credit that is returned to the company is displayed as a negative expense.
+
+If a report includes a credit or a refund expense, it will offset the total amount on the report.
+For example, the report has two reimbursable expenses, $400 and $500. The total Reimbursable is $900.
+Conversely, a -$400 and $500 will be a total Reimbursable amount of $500
diff --git a/docs/articles/expensify-classic/getting-started/Invite-Employees.md b/docs/articles/expensify-classic/getting-started/Invite-Employees.md
deleted file mode 100644
index 73dc7b8274f0..000000000000
--- a/docs/articles/expensify-classic/getting-started/Invite-Employees.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Invite Employees
-description: Invite Employees
----
-## Resource Coming Soon!
diff --git a/docs/articles/expensify-classic/getting-started/Invite-Members.md b/docs/articles/expensify-classic/getting-started/Invite-Members.md
new file mode 100644
index 000000000000..5b3c17c2e8fb
--- /dev/null
+++ b/docs/articles/expensify-classic/getting-started/Invite-Members.md
@@ -0,0 +1,62 @@
+---
+title: Invite Members
+description: Learn how add your employees to submit expenses in Expensify
+---
+# Overview
+
+To invite your employees to Expensify, simply add them as members to your Workspace.
+
+# How to Invite members to Expensify
+
+## Inviting Members Manually
+
+Navigate to **Settings > Workspace > Group > *Workspace Name* > People** - then click **Invite** and enter the invitee's email address.
+
+Indicate whether you want them to be an Employee, Admin, or Auditor on the Workspace.
+
+If you are utilizing the Advanced Approval feature and the invitee is an approver, you can use the "Approves to" field to specify to whom they approve and forward reports for additional approval.
+
+## Inviting Members to a Workspace in Bulk
+
+Navigate to **Settings > Workspaces > Group > *Workspace Name* > People** - then click Invite and enter all of the email addresses separated by comma. Indicate whether you want them to be an Employee, Admin, or Auditor on the Workspace.
+
+If you are utilizing the Advanced Approval feature, you can specify who each member should submit their expense reports to and who an approver should send approved reports to for the next step in the approval process. If someone is the final approver, you can leave this field blank.
+
+Another convenient method is to employ the spreadsheet bulk upload option for inviting members to a Workspace. This proves particularly helpful when initially configuring your system or when dealing with numerous member updates. Simply click the "Import from Spreadsheet" button and upload a file in formats such as .csv, .txt, .xls, or .xlsx to streamline the process.
+
+After uploading the spreadsheet, we'll display a window where you can choose which columns to import and what they correspond to. These are the fields:
+- Email
+- Role
+- Custom Field 1
+- Custom Field 2
+- Submits To
+- Approves To
+- Approval Limit
+- Over Limit Forward To
+
+Click the **Import** button and you're done. We will import the new members with the optional settings and update any already existing ones.
+
+## Inviting Members with a Shareable Workspace Joining Link
+
+You have the ability to invite your colleagues to join your Expensify Workspace by sharing a unique Workspace Joining Link. You can use this link as many times as necessary to invite multiple members through various communication methods such as internal emails, chats, text messages, and more.
+
+To find your unique link, simply go to **Settings > Workspace > Group > *Workspace Name* > People**.
+
+## Allowing Members to Automatically Join Your Workspace
+
+You can streamline the process of inviting colleagues to your Workspace by enabling the Pre-approve switch located below your Workspace Joining Link. This allows teammates to automatically become part of your Workspace as soon as they create an Expensify account using their work email address.
+
+Here's how it works: If a colleague signs up with a work email address that matches the email domain of a company Workspace owner (e.g., if the Workspace owner's email is admin@expensify.com and the colleague signs up with employee@expensify.com), they will be able to join your Workspace seamlessly without requiring a manual invitation. When new members join the Workspace, they will be set up to submit their expense reports to the Workspace owner by default.
+
+To enable this feature, go to **Settings > Workspace > Group > *Workspace Name* > People**.
+
+
+# FAQ
+## Who can invite members to Expensify
+Any Workspace Admin can add members to a Group Workspace using any of the above methods.
+
+## How can I customize an invite message?
+Under **Settings > Workspace > Group > *Workspace Name* > People > Invite** you can enter a custom message you'd like members to receive in their invitation email.
+
+## How can I invite members via the API?
+If you would like to integrate an open API HR software, you can use our [Advanced Employee Updater API](https://integrations.expensify.com/Integration-Server/doc/employeeUpdater/) to invite members to your Workspace.
diff --git a/docs/articles/expensify-classic/getting-started/tips-and-tricks/Enable-Location-Access-On-Web.md b/docs/articles/expensify-classic/getting-started/tips-and-tricks/Enable-Location-Access-On-Web.md
deleted file mode 100644
index 507d24503af8..000000000000
--- a/docs/articles/expensify-classic/getting-started/tips-and-tricks/Enable-Location-Access-On-Web.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: Enable Location Access on Web
-description: How to enable location access for Expensify websites on your browser
-redirect_from: articles/other/Enable-Location-Access-on-Web/
----
-
-
-# About
-
-If you'd like to use features that rely on your current location you will need to enable location permissions for Expensify. You can find instructions for how to enable location settings on the three most common web browsers below. If your browser is not in the list then please do a web search for your browser and "enable location settings".
-
-# How-to
-
-
-### Chrome
-1. Open Chrome
-2. At the top right, click the three-dot Menu > Settings
-3. Click "Privacy and Security" and then "Site Settings"
-4. Click Location
-5. Check the "Not allowed to see your location" list to make sure expensify.com and new.expensify.com are not listed. If they are, click the delete icon next to them to allow location access
-
-[Chrome help page](https://support.google.com/chrome/answer/142065)
-
-### Firefox
-
-1. Open Firefox
-2. In the URL bar enter "about:preferences"
-3. On the left hand side select "Privacy & Security"
-4. Scroll down to Permissions
-5. Click on Settings next to Location
-6. If location access is blocked for expensify.com or new.expensify.com, you can update it here to allow access
-
-[Firefox help page](https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more)
-
-### Safari
-1. In the top menu bar click Safari
-2. Then select Settings > Websites
-3. Click Location on the left hand side
-4. If expensify.com or new.expensify.com have "Deny" set as their access, update it to "Ask" or "Allow"
-
-Ask: The site must ask if it can use your location.
-Deny: The site can’t use your location.
-Allow: The site can always use your location.
-
-[Safari help page](https://support.apple.com/guide/safari/websites-ibrwe2159f50/mac)
\ No newline at end of file
diff --git a/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md b/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md
index 6b40a0f4adce..fcb1c8018613 100644
--- a/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md
+++ b/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md
@@ -6,7 +6,7 @@ description: Expensify Per Diems support simple, pre-determined, tax-free allowa
Per Diems are a flat rate given based on a timed range traveled for business purposes regardless of actual expenses incurred. A Per Diem is only based on the time you travel for work: it starts when you leave your home and ends when you arrive home.
-Per Diems themselves are created to alleviate much of the heavy lifting that Expense Reporting is well known for. Per Diem claims generally remove the hassle of saving multiple receipts and allow you to claim back a simple, pre-determined, tax-free allowance set by your jurisdiction or company.
+Per Diems themselves are created to alleviate much of the heavy lifting that expense reporting is well known for. Per Diem claims generally remove the hassle of saving multiple receipts and allow you to claim back a simple, pre-determined, tax-free allowance set by your jurisdiction or company.
# How to set up Per Diems in Expensify
@@ -75,11 +75,10 @@ Most companies will also set a Description Hint, which allows admins to take the
**Cons:**
-- Sometimes, jurisdiction-set amounts can be deemed incorrect or too low. In these cases, it can be challenging to establish a fair and realistic per diem for different costs in different locations. Additionally, allowing more than a tax-free amount adds undue labor for admins teams to split out taxable and tax-free expense reimbursements.
+- Sometimes, jurisdiction-set amounts can be deemed incorrect or too low. In these cases, it can be challenging to establish a fair and realistic per diem for different costs in different locations. Additionally, allowing more than a tax-free amount adds undue labor for admin teams to split out taxable and tax-free expense reimbursements.
- Set Per Diems might restrict employee choices that could have benefitted the company, i.e., a sales team member not picking up a full dinner tab or pushing split bill reclamation back onto employees after an individual picks up the tab and each user submits their own Per Diem claims.
- It does not eliminate employee expense fraud, and reduced receipt requirements may make it easier.
-
-As a business, you can never be sure that your expenses bill matches what employees have had to spend. Because you're reimbursing pre-determined amounts, there may be substantial hidden savings you're not taking advantage of.
+- As a business, you can never be sure that your expenses bill matches what employees have had to spend. Because you're reimbursing pre-determined amounts, there may be substantial hidden savings you're not taking advantage of.
## How to manage existing rates and avoid duplicates
diff --git a/docs/assets/images/ExpensifyHelp_CardSettings.png b/docs/assets/images/ExpensifyHelp_CardSettings.png
new file mode 100644
index 000000000000..c10a3d1cbc39
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_CardSettings.png differ
diff --git a/docs/assets/images/ExpensifyHelp_SettlementExpanded.png b/docs/assets/images/ExpensifyHelp_SettlementExpanded.png
new file mode 100644
index 000000000000..8672c8639202
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_SettlementExpanded.png differ
diff --git a/docs/assets/images/ExpensifyHelp_SettlementExport.png b/docs/assets/images/ExpensifyHelp_SettlementExport.png
new file mode 100644
index 000000000000..b8c9a36220d4
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_SettlementExport.png differ
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index 7d77ddebb8fa..5f25018a5c9d 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -19,7 +19,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.3.80
+ 1.3.81
CFBundleSignature
????
CFBundleURLTypes
@@ -40,7 +40,7 @@
CFBundleVersion
- 1.3.80.0
+ 1.3.81.6
ITSAppUsesNonExemptEncryption
LSApplicationQueriesSchemes
diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist
index 75730cafe16c..c322f1e99957 100644
--- a/ios/NewExpensifyTests/Info.plist
+++ b/ios/NewExpensifyTests/Info.plist
@@ -15,10 +15,10 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 1.3.80
+ 1.3.81
CFBundleSignature
????
CFBundleVersion
- 1.3.80.0
+ 1.3.81.6
diff --git a/ios/Podfile b/ios/Podfile
index b30510572448..6aee4b94df04 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -2,17 +2,29 @@
# This value is used by $RNMapboxMaps
$RNMapboxMapsImpl = 'mapbox'
-# Resolve react_native_pods.rb with node to allow for hoisting
-require Pod::Executable.execute_command('node', ['-p',
- 'require.resolve(
- "react-native/scripts/react_native_pods.rb",
- {paths: [process.argv[1]]},
- )', __dir__]).strip
+def node_require(script)
+ # Resolve script with node to allow for hoisting
+ require Pod::Executable.execute_command('node', ['-p',
+ "require.resolve(
+ '#{script}',
+ {paths: [process.argv[1]]},
+ )", __dir__]).strip
+end
+
+node_require('react-native/scripts/react_native_pods.rb')
+node_require('react-native-permissions/scripts/setup.rb')
# Our min supported iOS version is higher than the default (min_ios_version_supported) to support libraires such as Airship
platform :ios, 13
prepare_react_native_project!
+setup_permissions([
+ 'Camera',
+ 'LocationAccuracy',
+ 'LocationAlways',
+ 'LocationWhenInUse'
+])
+
# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
#
@@ -51,8 +63,6 @@ pre_install do |installer|
end
target 'NewExpensify' do
- permissions_path = '../node_modules/react-native-permissions/ios'
-
project 'NewExpensify',
'DebugDevelopment' => :debug,
'DebugAdHoc' => :debug,
@@ -61,11 +71,6 @@ target 'NewExpensify' do
'ReleaseAdHoc' => :release,
'ReleaseProduction' => :release
- pod 'Permission-LocationAccuracy', :path => "#{permissions_path}/LocationAccuracy"
- pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
- pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
- pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
-
config = use_native_modules!
# Flags change depending on the env values.
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 6e0c44299398..54d0525fd3c9 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -233,9 +233,9 @@ PODS:
- libwebp/mux (1.2.4):
- libwebp/demux
- libwebp/webp (1.2.4)
- - lottie-ios (3.4.4)
- - lottie-react-native (5.1.6):
- - lottie-ios (~> 3.4.0)
+ - lottie-ios (4.3.3)
+ - lottie-react-native (6.3.1):
+ - lottie-ios (~> 4.3.0)
- React-Core
- MapboxCommon (23.6.0)
- MapboxCoreMaps (10.14.0):
@@ -256,14 +256,6 @@ PODS:
- Onfido (= 27.4.0)
- React
- OpenSSL-Universal (1.1.1100)
- - Permission-Camera (3.6.1):
- - RNPermissions
- - Permission-LocationAccuracy (3.6.1):
- - RNPermissions
- - Permission-LocationAlways (3.6.1):
- - RNPermissions
- - Permission-LocationWhenInUse (3.6.1):
- - RNPermissions
- Plaid (4.1.0)
- PromisesObjC (2.2.0)
- RCT-Folly (2021.07.22.00):
@@ -587,7 +579,7 @@ PODS:
- React
- react-native-image-picker (5.1.0):
- React-Core
- - react-native-key-command (1.0.1):
+ - react-native-key-command (1.0.6):
- React-Core
- react-native-netinfo (9.3.10):
- React-Core
@@ -730,7 +722,7 @@ PODS:
- React-Core
- RNCAsyncStorage (1.17.11):
- React-Core
- - RNCClipboard (1.5.1):
+ - RNCClipboard (1.12.1):
- React-Core
- RNCPicker (2.4.4):
- React-Core
@@ -781,7 +773,7 @@ PODS:
- React
- React-Core
- Turf
- - RNPermissions (3.6.1):
+ - RNPermissions (3.9.3):
- React-Core
- RNReactNativeHapticFeedback (1.14.0):
- React-Core
@@ -817,7 +809,7 @@ PODS:
- RNScreens (3.21.0):
- React-Core
- React-RCTImage
- - RNSVG (13.13.0):
+ - RNSVG (13.14.0):
- React-Core
- SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1)
@@ -867,10 +859,6 @@ DEPENDENCIES:
- lottie-react-native (from `../node_modules/lottie-react-native`)
- "onfido-react-native-sdk (from `../node_modules/@onfido/react-native-sdk`)"
- OpenSSL-Universal (= 1.1.1100)
- - Permission-Camera (from `../node_modules/react-native-permissions/ios/Camera`)
- - Permission-LocationAccuracy (from `../node_modules/react-native-permissions/ios/LocationAccuracy`)
- - Permission-LocationAlways (from `../node_modules/react-native-permissions/ios/LocationAlways`)
- - Permission-LocationWhenInUse (from `../node_modules/react-native-permissions/ios/LocationWhenInUse`)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
@@ -927,7 +915,7 @@ DEPENDENCIES:
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- "RNAppleAuthentication (from `../node_modules/@invertase/react-native-apple-authentication`)"
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
- - "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
+ - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)"
- "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
- "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
@@ -1018,14 +1006,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/lottie-react-native"
onfido-react-native-sdk:
:path: "../node_modules/@onfido/react-native-sdk"
- Permission-Camera:
- :path: "../node_modules/react-native-permissions/ios/Camera"
- Permission-LocationAccuracy:
- :path: "../node_modules/react-native-permissions/ios/LocationAccuracy"
- Permission-LocationAlways:
- :path: "../node_modules/react-native-permissions/ios/LocationAlways"
- Permission-LocationWhenInUse:
- :path: "../node_modules/react-native-permissions/ios/LocationWhenInUse"
RCT-Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
RCTRequired:
@@ -1135,7 +1115,7 @@ EXTERNAL SOURCES:
RNCAsyncStorage:
:path: "../node_modules/@react-native-async-storage/async-storage"
RNCClipboard:
- :path: "../node_modules/@react-native-community/clipboard"
+ :path: "../node_modules/@react-native-clipboard/clipboard"
RNCPicker:
:path: "../node_modules/@react-native-picker/picker"
RNDateTimePicker:
@@ -1217,8 +1197,8 @@ SPEC CHECKSUMS:
hermes-engine: 81191603c4eaa01f5e4ae5737a9efcf64756c7b2
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
- lottie-ios: 8f97d3271e155c2d688875c29cd3c74908aef5f8
- lottie-react-native: 8f9d4be452e23f6e5ca0fdc11669dc99ab52be81
+ lottie-ios: 25e7b2675dad5c3ddad369ac9baab03560c5bfdd
+ lottie-react-native: c9f1db4f4124dcce9f8159e65d8dc6e8bcb11fb4
MapboxCommon: 4a0251dd470ee37e7fadda8e285c01921a5e1eb0
MapboxCoreMaps: eb07203bbb0b1509395db5ab89cd3ad6c2e3c04c
MapboxMaps: af50ec61a7eb3b032c3f7962c6bd671d93d2a209
@@ -1227,10 +1207,6 @@ SPEC CHECKSUMS:
Onfido: e36f284b865adcf99d9c905590a64ac09d4a576b
onfido-react-native-sdk: 4ecde1a97435dcff9f00a878e3f8d1eb14fabbdc
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
- Permission-Camera: bf6791b17c7f614b6826019fcfdcc286d3a107f6
- Permission-LocationAccuracy: 76df17de5c6b8bc2eee34e61ee92cdd7a864c73d
- Permission-LocationAlways: 8d99b025c9f73c696e0cdb367e42525f2e9a26f2
- Permission-LocationWhenInUse: 3ba99e45c852763f730eabecec2870c2382b7bd4
Plaid: 7d340abeadb46c7aa1a91f896c5b22395a31fcf2
PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
@@ -1257,7 +1233,7 @@ SPEC CHECKSUMS:
react-native-geolocation: 0f7fe8a4c2de477e278b0365cce27d089a8c5903
react-native-image-manipulator: c48f64221cfcd46e9eec53619c4c0374f3328a56
react-native-image-picker: c33d4e79f0a14a2b66e5065e14946ae63749660b
- react-native-key-command: c2645ec01eb1fa664606c09480c05cb4220ef67b
+ react-native-key-command: 5af6ee30ff4932f78da6a2109017549042932aa5
react-native-netinfo: ccbe1085dffd16592791d550189772e13bf479e2
react-native-pager-view: 0ccb8bf60e2ebd38b1f3669fa3650ecce81db2df
react-native-pdf: 7c0e91ada997bac8bac3bb5bea5b6b81f5a3caae
@@ -1287,7 +1263,7 @@ SPEC CHECKSUMS:
ReactCommon: 4b2bdcb50a3543e1c2b2849ad44533686610826d
RNAppleAuthentication: 0571c08da8c327ae2afc0261b48b4a515b0286a6
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
- RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
+ RNCClipboard: d77213bfa269013bf4b857b7a9ca37ee062d8ef1
RNCPicker: 0b65be85fe7954fbb2062ef079e3d1cde252d888
RNDateTimePicker: 7658208086d86d09e1627b5c34ba0cf237c60140
RNDeviceInfo: 4701f0bf2a06b34654745053db0ce4cb0c53ada7
@@ -1302,11 +1278,11 @@ SPEC CHECKSUMS:
RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0
RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81
rnmapbox-maps: 6f638ec002aa6e906a6f766d69cd45f968d98e64
- RNPermissions: dcdb7b99796bbeda6975a6e79ad519c41b251b1c
+ RNPermissions: 9b086c8f05b2e2faa587fdc31f4c5ab4509728aa
RNReactNativeHapticFeedback: 1e3efeca9628ff9876ee7cdd9edec1b336913f8c
RNReanimated: ab2e96c6d5591c3dfbb38a464f54c8d17fb34a87
RNScreens: d037903436160a4b039d32606668350d2a808806
- RNSVG: ed492aaf3af9ca01bc945f7a149d76d62e73ec82
+ RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
@@ -1315,6 +1291,6 @@ SPEC CHECKSUMS:
Yoga: 3efc43e0d48686ce2e8c60f99d4e6bd349aff981
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
-PODFILE CHECKSUM: 2daf34c870819a933f3fefe426801d54b2ff2a14
+PODFILE CHECKSUM: ff769666b7221c15936ebc5576a8c8e467dc6879
COCOAPODS: 1.12.1
diff --git a/jest.config.js b/jest.config.js
index 6cf44b6b3695..c3125284837a 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -10,6 +10,7 @@ module.exports = {
],
transform: {
'^.+\\.jsx?$': 'babel-jest',
+ '^.+\\.svg?$': 'jest-transformer-svg',
},
transformIgnorePatterns: ['/node_modules/(?!react-native)/'],
testPathIgnorePatterns: ['/node_modules'],
diff --git a/jest/setup.js b/jest/setup.js
index f03c53540359..4def7d1efad5 100644
--- a/jest/setup.js
+++ b/jest/setup.js
@@ -1,6 +1,7 @@
import 'setimmediate';
import 'react-native-gesture-handler/jestSetup';
import * as reanimatedJestUtils from 'react-native-reanimated/src/reanimated2/jestUtils';
+import mockClipboard from '@react-native-clipboard/clipboard/jest/clipboard-mock';
import setupMockImages from './setupMockImages';
setupMockImages();
@@ -10,6 +11,10 @@ reanimatedJestUtils.setUpTests();
// https://reactnavigation.org/docs/testing/#mocking-native-modules
jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper');
+// Clipboard requires mocking as NativeEmitter will be undefined with jest-runner.
+// https://github.com/react-native-clipboard/clipboard#mocking-clipboard
+jest.mock('@react-native-clipboard/clipboard', () => mockClipboard);
+
// Mock react-native-onyx storage layer because the SQLite storage layer doesn't work in jest.
// Mocking this file in __mocks__ does not work because jest doesn't support mocking files that are not directly used in the testing project,
// and we only want to mock the storage layer, not the whole Onyx module.
diff --git a/package-lock.json b/package-lock.json
index 2b3fb83b999f..c58c8f6a6f07 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "new.expensify",
- "version": "1.3.80-0",
+ "version": "1.3.81-6",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "new.expensify",
- "version": "1.3.80-0",
+ "version": "1.3.81-6",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -25,7 +25,7 @@
"@onfido/react-native-sdk": "7.4.0",
"@react-native-async-storage/async-storage": "^1.17.10",
"@react-native-camera-roll/camera-roll": "5.4.0",
- "@react-native-community/clipboard": "^1.5.1",
+ "@react-native-clipboard/clipboard": "^1.12.1",
"@react-native-community/datetimepicker": "^3.5.2",
"@react-native-community/geolocation": "^3.0.6",
"@react-native-community/netinfo": "^9.3.10",
@@ -57,7 +57,7 @@
"idb-keyval": "^6.2.1",
"jest-when": "^3.5.2",
"lodash": "4.17.21",
- "lottie-react-native": "^5.1.6",
+ "lottie-react-native": "^6.3.1",
"mapbox-gl": "^2.15.0",
"moment": "^2.29.4",
"moment-timezone": "^0.5.31",
@@ -90,7 +90,7 @@
"react-native-image-pan-zoom": "^2.1.12",
"react-native-image-picker": "^5.1.0",
"react-native-image-size": "git+https://github.com/Expensify/react-native-image-size#8393b7e58df6ff65fd41f60aee8ece8822c91e2b",
- "react-native-key-command": "^1.0.5",
+ "react-native-key-command": "^1.0.6",
"react-native-linear-gradient": "^2.8.1",
"react-native-localize": "^2.2.6",
"react-native-modal": "^13.0.0",
@@ -98,7 +98,7 @@
"react-native-pager-view": "^6.2.0",
"react-native-pdf": "^6.7.1",
"react-native-performance": "^5.1.0",
- "react-native-permissions": "^3.0.1",
+ "react-native-permissions": "^3.9.3",
"react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#eae05855286dc699954415cc1d629bfd8e8e47e2",
"react-native-plaid-link-sdk": "^10.0.0",
"react-native-qrcode-svg": "^6.2.0",
@@ -118,6 +118,7 @@
"react-pdf": "^6.2.2",
"react-plaid-link": "3.3.2",
"react-web-config": "^1.0.0",
+ "react-webcam": "^7.1.1",
"react-window": "^1.8.9",
"save": "^2.4.0",
"semver": "^7.5.2",
@@ -209,6 +210,7 @@
"jest-circus": "29.4.1",
"jest-cli": "29.4.1",
"jest-environment-jsdom": "^29.4.1",
+ "jest-transformer-svg": "^2.0.1",
"metro-react-native-babel-preset": "0.76.8",
"mock-fs": "^4.13.0",
"onchange": "^7.1.0",
@@ -7007,6 +7009,15 @@
"react-native": ">=0.59"
}
},
+ "node_modules/@react-native-clipboard/clipboard": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.12.1.tgz",
+ "integrity": "sha512-+PNk8kflpGte0W1Nz61/Dp8gHTxyuRjkVyRYBawymSIGTDHCC/zOJSbig6kGIkD8MeaGHC2vGYQJyUyCrgVPBQ==",
+ "peerDependencies": {
+ "react": ">=16.0",
+ "react-native": ">=0.57.0"
+ }
+ },
"node_modules/@react-native-community/cli": {
"version": "11.3.6",
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.6.tgz",
@@ -8623,16 +8634,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/@react-native-community/clipboard": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz",
- "integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA==",
- "license": "MIT",
- "peerDependencies": {
- "react": ">=16.0",
- "react-native": ">=0.57.0"
- }
- },
"node_modules/@react-native-community/datetimepicker": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-3.5.2.tgz",
@@ -36490,6 +36491,16 @@
"node": ">=8"
}
},
+ "node_modules/jest-transformer-svg": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jest-transformer-svg/-/jest-transformer-svg-2.0.1.tgz",
+ "integrity": "sha512-L3j70WjfQtAYXjZi/vyKW8A5pcEUnv7mR0cugSyP6Kqee+fjsMzUHs5UPbnLKH+y7lfSpOjXijMbfEcjLqCuaw==",
+ "dev": true,
+ "peerDependencies": {
+ "jest": ">= 28.1.0",
+ "react": "^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/jest-util": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz",
@@ -38003,22 +38014,11 @@
"loose-envify": "cli.js"
}
},
- "node_modules/lottie-ios": {
- "version": "3.5.0",
- "license": "Apache-2.0",
- "peer": true
- },
"node_modules/lottie-react-native": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.6.tgz",
- "integrity": "sha512-vhdeZstXMfuVKwnddYWjJgQ/1whGL58IJEJu/iSf0XQ5gAb4pp/+vy91mdYQLezlb8Aw4Vu3fKnqErJL2hwchg==",
- "license": "Apache-2.0",
- "dependencies": {
- "invariant": "^2.2.2",
- "react-native-safe-modules": "^1.0.3"
- },
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.3.1.tgz",
+ "integrity": "sha512-M18nAVYeGMF//bhL27D2zuMcrFPH0jbD/deBvcWi0CCcfZf6LQfx45xt+cuDqwr5nh6dMm+ta8KfZJmkbNhtlg==",
"peerDependencies": {
- "lottie-ios": "^3.4.0",
"react": "*",
"react-native": ">=0.46",
"react-native-windows": ">=0.63.x"
@@ -38029,24 +38029,6 @@
}
}
},
- "node_modules/lottie-react-native/node_modules/dedent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
- "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==",
- "license": "MIT"
- },
- "node_modules/lottie-react-native/node_modules/react-native-safe-modules": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz",
- "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==",
- "license": "MIT",
- "dependencies": {
- "dedent": "^0.6.0"
- },
- "peerDependencies": {
- "react-native": "*"
- }
- },
"node_modules/lottie-web": {
"version": "5.10.2",
"license": "MIT"
@@ -44647,9 +44629,9 @@
"license": "MIT"
},
"node_modules/react-native-key-command": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/react-native-key-command/-/react-native-key-command-1.0.5.tgz",
- "integrity": "sha512-SJWf1e8f3yGFrFDNCmJ+aiGmnwokGgtMicfvuyukhQtXkncCQb9pBI4uhBen0Bd30uMmUDgGAA9O56OyIdf5jw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/react-native-key-command/-/react-native-key-command-1.0.6.tgz",
+ "integrity": "sha512-N+/kmGMSnvTOF5DXupGg9ztkeOXjre//+Z+Mv4RU8RLYNvW7TtDgHlOxl4AngeGD1pG5gbI6hrlUukrRSCs6Ng==",
"dependencies": {
"eventemitter3": "^5.0.1",
"underscore": "^1.13.4"
@@ -44788,8 +44770,9 @@
}
},
"node_modules/react-native-permissions": {
- "version": "3.6.1",
- "license": "MIT",
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.9.3.tgz",
+ "integrity": "sha512-2UqG2Em4xHxLq0E1XynXMdQ//XZltxVUjTn/i4fPIZuuZ0cQ+ydAQmLXqDPxOXvG0sICwc3oe0orJmQdqpa1sQ==",
"peerDependencies": {
"react": ">=16.13.1",
"react-native": ">=0.63.3",
@@ -57959,6 +57942,12 @@
"integrity": "sha512-SMEhc+2hQWubwzxR6Zac0CmrJ2rdoHHBo0ibG2iNMsxR0dnU5AdRGnYF/tyK9i20/i7ZNxn+qsEJ69shpkd6gg==",
"requires": {}
},
+ "@react-native-clipboard/clipboard": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.12.1.tgz",
+ "integrity": "sha512-+PNk8kflpGte0W1Nz61/Dp8gHTxyuRjkVyRYBawymSIGTDHCC/zOJSbig6kGIkD8MeaGHC2vGYQJyUyCrgVPBQ==",
+ "requires": {}
+ },
"@react-native-community/cli": {
"version": "11.3.6",
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.6.tgz",
@@ -59179,12 +59168,6 @@
"joi": "^17.2.1"
}
},
- "@react-native-community/clipboard": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz",
- "integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA==",
- "requires": {}
- },
"@react-native-community/datetimepicker": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-3.5.2.tgz",
@@ -79327,6 +79310,13 @@
}
}
},
+ "jest-transformer-svg": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jest-transformer-svg/-/jest-transformer-svg-2.0.1.tgz",
+ "integrity": "sha512-L3j70WjfQtAYXjZi/vyKW8A5pcEUnv7mR0cugSyP6Kqee+fjsMzUHs5UPbnLKH+y7lfSpOjXijMbfEcjLqCuaw==",
+ "dev": true,
+ "requires": {}
+ },
"jest-util": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz",
@@ -80370,33 +80360,11 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "lottie-ios": {
- "version": "3.5.0",
- "peer": true
- },
"lottie-react-native": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.6.tgz",
- "integrity": "sha512-vhdeZstXMfuVKwnddYWjJgQ/1whGL58IJEJu/iSf0XQ5gAb4pp/+vy91mdYQLezlb8Aw4Vu3fKnqErJL2hwchg==",
- "requires": {
- "invariant": "^2.2.2",
- "react-native-safe-modules": "^1.0.3"
- },
- "dependencies": {
- "dedent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
- "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g=="
- },
- "react-native-safe-modules": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz",
- "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==",
- "requires": {
- "dedent": "^0.6.0"
- }
- }
- }
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.3.1.tgz",
+ "integrity": "sha512-M18nAVYeGMF//bhL27D2zuMcrFPH0jbD/deBvcWi0CCcfZf6LQfx45xt+cuDqwr5nh6dMm+ta8KfZJmkbNhtlg==",
+ "requires": {}
},
"lottie-web": {
"version": "5.10.2"
@@ -85249,9 +85217,9 @@
"from": "react-native-image-size@git+https://github.com/Expensify/react-native-image-size#8393b7e58df6ff65fd41f60aee8ece8822c91e2b"
},
"react-native-key-command": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/react-native-key-command/-/react-native-key-command-1.0.5.tgz",
- "integrity": "sha512-SJWf1e8f3yGFrFDNCmJ+aiGmnwokGgtMicfvuyukhQtXkncCQb9pBI4uhBen0Bd30uMmUDgGAA9O56OyIdf5jw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/react-native-key-command/-/react-native-key-command-1.0.6.tgz",
+ "integrity": "sha512-N+/kmGMSnvTOF5DXupGg9ztkeOXjre//+Z+Mv4RU8RLYNvW7TtDgHlOxl4AngeGD1pG5gbI6hrlUukrRSCs6Ng==",
"requires": {
"eventemitter3": "^5.0.1",
"underscore": "^1.13.4"
@@ -85324,7 +85292,9 @@
"requires": {}
},
"react-native-permissions": {
- "version": "3.6.1",
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.9.3.tgz",
+ "integrity": "sha512-2UqG2Em4xHxLq0E1XynXMdQ//XZltxVUjTn/i4fPIZuuZ0cQ+ydAQmLXqDPxOXvG0sICwc3oe0orJmQdqpa1sQ==",
"requires": {}
},
"react-native-picker-select": {
diff --git a/package.json b/package.json
index 80320df08d69..7ddfb7b7f6eb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
- "version": "1.3.80-0",
+ "version": "1.3.81-6",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
@@ -68,7 +68,7 @@
"@onfido/react-native-sdk": "7.4.0",
"@react-native-async-storage/async-storage": "^1.17.10",
"@react-native-camera-roll/camera-roll": "5.4.0",
- "@react-native-community/clipboard": "^1.5.1",
+ "@react-native-clipboard/clipboard": "^1.12.1",
"@react-native-community/datetimepicker": "^3.5.2",
"@react-native-community/geolocation": "^3.0.6",
"@react-native-community/netinfo": "^9.3.10",
@@ -100,7 +100,7 @@
"idb-keyval": "^6.2.1",
"jest-when": "^3.5.2",
"lodash": "4.17.21",
- "lottie-react-native": "^5.1.6",
+ "lottie-react-native": "^6.3.1",
"mapbox-gl": "^2.15.0",
"moment": "^2.29.4",
"moment-timezone": "^0.5.31",
@@ -114,8 +114,8 @@
"react-collapse": "^5.1.0",
"react-content-loader": "^6.1.0",
"react-dom": "18.1.0",
- "react-map-gl": "^7.1.3",
"react-error-boundary": "^4.0.11",
+ "react-map-gl": "^7.1.3",
"react-native": "0.72.4",
"react-native-android-location-enabler": "^1.2.2",
"react-native-blob-util": "^0.17.3",
@@ -133,7 +133,7 @@
"react-native-image-pan-zoom": "^2.1.12",
"react-native-image-picker": "^5.1.0",
"react-native-image-size": "git+https://github.com/Expensify/react-native-image-size#8393b7e58df6ff65fd41f60aee8ece8822c91e2b",
- "react-native-key-command": "^1.0.5",
+ "react-native-key-command": "^1.0.6",
"react-native-linear-gradient": "^2.8.1",
"react-native-localize": "^2.2.6",
"react-native-modal": "^13.0.0",
@@ -141,7 +141,7 @@
"react-native-pager-view": "^6.2.0",
"react-native-pdf": "^6.7.1",
"react-native-performance": "^5.1.0",
- "react-native-permissions": "^3.0.1",
+ "react-native-permissions": "^3.9.3",
"react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#eae05855286dc699954415cc1d629bfd8e8e47e2",
"react-native-plaid-link-sdk": "^10.0.0",
"react-native-qrcode-svg": "^6.2.0",
@@ -161,6 +161,7 @@
"react-pdf": "^6.2.2",
"react-plaid-link": "3.3.2",
"react-web-config": "^1.0.0",
+ "react-webcam": "^7.1.1",
"react-window": "^1.8.9",
"save": "^2.4.0",
"semver": "^7.5.2",
@@ -252,6 +253,7 @@
"jest-circus": "29.4.1",
"jest-cli": "29.4.1",
"jest-environment-jsdom": "^29.4.1",
+ "jest-transformer-svg": "^2.0.1",
"metro-react-native-babel-preset": "0.76.8",
"mock-fs": "^4.13.0",
"onchange": "^7.1.0",
diff --git a/src/CONST.ts b/src/CONST.ts
index 23957827d140..cbfe07ae5aab 100755
--- a/src/CONST.ts
+++ b/src/CONST.ts
@@ -108,6 +108,7 @@ const CONST = {
// Sizes needed for report empty state background image handling
EMPTY_STATE_BACKGROUND: {
+ ASPECT_RATIO: 3.72,
SMALL_SCREEN: {
IMAGE_HEIGHT: 300,
CONTAINER_MINHEIGHT: 200,
@@ -234,7 +235,6 @@ const CONST = {
BETA_EXPENSIFY_WALLET: 'expensifyWallet',
BETA_COMMENT_LINKING: 'commentLinking',
INTERNATIONALIZATION: 'internationalization',
- IOU_SEND: 'sendMoney',
POLICY_ROOMS: 'policyRooms',
PASSWORDLESS: 'passwordless',
TASKS: 'tasks',
@@ -1264,7 +1264,7 @@ const CONST = {
CARD_NUMBER: /^[0-9]{15,16}$/,
CARD_SECURITY_CODE: /^[0-9]{3,4}$/,
CARD_EXPIRATION_DATE: /^(0[1-9]|1[0-2])([^0-9])?([0-9]{4}|([0-9]{2}))$/,
- ROOM_NAME: /^#[a-z0-9à-ÿ-]{1,80}$/,
+ ROOM_NAME: /^#[\p{Ll}0-9-]{1,80}$/u,
// eslint-disable-next-line max-len, no-misleading-character-class
EMOJIS: /[\p{Extended_Pictographic}](\u200D[\p{Extended_Pictographic}]|[\u{1F3FB}-\u{1F3FF}]|[\u{E0020}-\u{E007F}]|\uFE0F|\u20E3)*|[\u{1F1E6}-\u{1F1FF}]{2}|[#*0-9]\uFE0F?\u20E3/gu,
@@ -2737,6 +2737,12 @@ const CONST = {
},
MISSING_TRANSLATION: 'MISSING TRANSLATION',
+ SEARCH_MAX_LENGTH: 500,
+
+ /**
+ * The count of characters we'll allow the user to type after reaching SEARCH_MAX_LENGTH in an input.
+ */
+ ADDITIONAL_ALLOWED_CHARACTERS: 20,
} as const;
export default CONST;
diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts
index 0a17d3a1d2f7..e01319cc2f66 100755
--- a/src/ONYXKEYS.ts
+++ b/src/ONYXKEYS.ts
@@ -252,6 +252,7 @@ const ONYXKEYS = {
REPORT_USER_IS_LEAVING_ROOM: 'reportUserIsLeavingRoom_',
SECURITY_GROUP: 'securityGroup_',
TRANSACTION: 'transactions_',
+ PRIVATE_NOTES_DRAFT: 'privateNotesDraft_',
// Manual request tab selector
SELECTED_TAB: 'selectedTab_',
@@ -291,6 +292,7 @@ const ONYXKEYS = {
PRIVATE_NOTES_FORM: 'privateNotesForm',
I_KNOW_A_TEACHER_FORM: 'iKnowTeacherForm',
INTRO_SCHOOL_PRINCIPAL_FORM: 'introSchoolPrincipalForm',
+ REPORT_VIRTUAL_CARD_FRAUD: 'reportVirtualCardFraudForm',
},
} as const;
diff --git a/src/ROUTES.ts b/src/ROUTES.ts
index 2b64dd9c5465..f151c1f1086d 100644
--- a/src/ROUTES.ts
+++ b/src/ROUTES.ts
@@ -75,11 +75,19 @@ export default {
route: '/settings/wallet/card/:domain',
getRoute: (domain: string) => `/settings/wallet/card/${domain}`,
},
+ SETTINGS_REPORT_FRAUD: {
+ route: '/settings/wallet/cards/:domain/report-virtual-fraud',
+ getRoute: (domain: string) => `/settings/wallet/cards/${domain}/report-virtual-fraud`,
+ },
SETTINGS_ADD_DEBIT_CARD: 'settings/wallet/add-debit-card',
SETTINGS_ADD_BANK_ACCOUNT: 'settings/wallet/add-bank-account',
SETTINGS_ENABLE_PAYMENTS: 'settings/wallet/enable-payments',
SETTINGS_WALLET_TRANSFER_BALANCE: 'settings/wallet/transfer-balance',
SETTINGS_WALLET_CHOOSE_TRANSFER_ACCOUNT: 'settings/wallet/choose-transfer-account',
+ SETTINGS_WALLET_CARD_ACTIVATE: {
+ route: 'settings/wallet/cards/:domain/activate',
+ getRoute: (domain: string) => `settings/wallet/cards/${domain}/activate`,
+ },
SETTINGS_PERSONAL_DETAILS: 'settings/profile/personal-details',
SETTINGS_PERSONAL_DETAILS_LEGAL_NAME: 'settings/profile/personal-details/legal-name',
SETTINGS_PERSONAL_DETAILS_DATE_OF_BIRTH: 'settings/profile/personal-details/date-of-birth',
@@ -286,6 +294,10 @@ export default {
route: 'workspace/:policyID/settings',
getRoute: (policyID: string) => `workspace/${policyID}/settings`,
},
+ WORKSPACE_SETTINGS_CURRENCY: {
+ route: 'workspace/:policyID/settings/currency',
+ getRoute: (policyID: string) => `workspace/${policyID}/settings/currency`,
+ },
WORKSPACE_CARD: {
route: 'workspace/:policyID/card',
getRoute: (policyID: string) => `workspace/${policyID}/card`,
diff --git a/src/components/AttachmentPicker/index.native.js b/src/components/AttachmentPicker/index.native.js
index 8b1bb54da920..0167bcbb7a4e 100644
--- a/src/components/AttachmentPicker/index.native.js
+++ b/src/components/AttachmentPicker/index.native.js
@@ -1,10 +1,12 @@
import _ from 'underscore';
import React, {useState, useRef, useCallback, useMemo} from 'react';
+import PropTypes from 'prop-types';
import {View, Alert, Linking} from 'react-native';
import RNDocumentPicker from 'react-native-document-picker';
import RNFetchBlob from 'react-native-blob-util';
+import lodashCompact from 'lodash/compact';
import {launchImageLibrary} from 'react-native-image-picker';
-import {propTypes as basePropTypes, defaultProps} from './attachmentPickerPropTypes';
+import {propTypes as basePropTypes, defaultProps as baseDefaultProps} from './attachmentPickerPropTypes';
import CONST from '../../CONST';
import * as FileUtils from '../../libs/fileDownload/FileUtils';
import * as Expensicons from '../Icon/Expensicons';
@@ -19,6 +21,14 @@ import useArrowKeyFocusManager from '../../hooks/useArrowKeyFocusManager';
const propTypes = {
...basePropTypes,
+
+ /** If this value is true, then we exclude Camera option. */
+ shouldHideCameraOption: PropTypes.bool,
+};
+
+const defaultProps = {
+ ...baseDefaultProps,
+ shouldHideCameraOption: false,
};
/**
@@ -90,7 +100,7 @@ const getDataForUpload = (fileData) => {
* @param {propTypes} props
* @returns {JSX.Element}
*/
-function AttachmentPicker({type, children}) {
+function AttachmentPicker({type, children, shouldHideCameraOption}) {
const [isVisible, setIsVisible] = useState(false);
const completeAttachmentSelection = useRef();
@@ -180,8 +190,8 @@ function AttachmentPicker({type, children}) {
);
const menuItemData = useMemo(() => {
- const data = [
- {
+ const data = lodashCompact([
+ !shouldHideCameraOption && {
icon: Expensicons.Camera,
textTranslationKey: 'attachmentPicker.takePhoto',
pickAttachment: () => showImagePicker(launchCamera),
@@ -191,18 +201,15 @@ function AttachmentPicker({type, children}) {
textTranslationKey: 'attachmentPicker.chooseFromGallery',
pickAttachment: () => showImagePicker(launchImageLibrary),
},
- ];
-
- if (type !== CONST.ATTACHMENT_PICKER_TYPE.IMAGE) {
- data.push({
+ type !== CONST.ATTACHMENT_PICKER_TYPE.IMAGE && {
icon: Expensicons.Paperclip,
textTranslationKey: 'attachmentPicker.chooseDocument',
pickAttachment: showDocumentPicker,
- });
- }
+ },
+ ]);
return data;
- }, [showDocumentPicker, showImagePicker, type]);
+ }, [showDocumentPicker, showImagePicker, type, shouldHideCameraOption]);
const [focusedIndex, setFocusedIndex] = useArrowKeyFocusManager({initialFocusedIndex: -1, maxIndex: menuItemData.length - 1, isActive: isVisible});
diff --git a/src/components/BaseMiniContextMenuItem.js b/src/components/BaseMiniContextMenuItem.js
index c5c0892324c3..3c423ffc80ea 100644
--- a/src/components/BaseMiniContextMenuItem.js
+++ b/src/components/BaseMiniContextMenuItem.js
@@ -73,6 +73,7 @@ function BaseMiniContextMenuItem(props) {
style={({hovered, pressed}) => [
styles.reportActionContextMenuMiniButton,
StyleUtils.getButtonBackgroundColorStyle(getButtonState(hovered, pressed, props.isDelayButtonStateComplete)),
+ props.isDelayButtonStateComplete && styles.cursorDefault,
]}
>
{(pressableState) => (
diff --git a/src/components/CategoryPicker/index.js b/src/components/CategoryPicker/index.js
index ef8b1d71ad1d..13abf057e4b1 100644
--- a/src/components/CategoryPicker/index.js
+++ b/src/components/CategoryPicker/index.js
@@ -32,6 +32,7 @@ function CategoryPicker({selectedCategory, policyCategories, policyRecentlyUsedC
}, [selectedCategory]);
const sections = useMemo(() => {
+ const validPolicyRecentlyUsedCategories = _.filter(policyRecentlyUsedCategories, (p) => !_.isEmpty(p));
const {categoryOptions} = OptionsListUtils.getFilteredOptions(
{},
{},
@@ -43,7 +44,7 @@ function CategoryPicker({selectedCategory, policyCategories, policyRecentlyUsedC
false,
true,
policyCategories,
- policyRecentlyUsedCategories,
+ validPolicyRecentlyUsedCategories,
false,
);
diff --git a/src/components/ConfirmationPage.js b/src/components/ConfirmationPage.js
index ffa3c780f154..4549d6ca6072 100644
--- a/src/components/ConfirmationPage.js
+++ b/src/components/ConfirmationPage.js
@@ -1,7 +1,7 @@
import React from 'react';
import {View} from 'react-native';
import PropTypes from 'prop-types';
-import Lottie from 'lottie-react-native';
+import Lottie from './Lottie';
import * as LottieAnimations from './LottieAnimations';
import Text from './Text';
import styles from '../styles/styles';
diff --git a/src/components/ContextMenuItem.js b/src/components/ContextMenuItem.js
index 2314f2fcf64e..4c740caea78a 100644
--- a/src/components/ContextMenuItem.js
+++ b/src/components/ContextMenuItem.js
@@ -100,6 +100,7 @@ function ContextMenuItem({onPress, successIcon, successText, icon, text, isMini,
style={getContextMenuItemStyles(windowWidth)}
isAnonymousAction={isAnonymousAction}
focused={isFocused}
+ interactive={isThrottledButtonActive}
/>
);
}
diff --git a/src/components/EmojiPicker/EmojiPickerMenu/index.js b/src/components/EmojiPicker/EmojiPickerMenu/index.js
index e7af97145347..3dfc5f59bb38 100755
--- a/src/components/EmojiPicker/EmojiPickerMenu/index.js
+++ b/src/components/EmojiPicker/EmojiPickerMenu/index.js
@@ -195,7 +195,7 @@ class EmojiPickerMenu extends Component {
return;
}
const emoji = lodashGet(item, ['types', this.props.preferredSkinTone], item.code);
- this.addToFrequentAndSelectEmoji(emoji, item);
+ this.props.onEmojiSelected(emoji, item);
return;
}
@@ -258,16 +258,6 @@ class EmojiPickerMenu extends Component {
document.removeEventListener('mousemove', this.mouseMoveHandler);
}
- /**
- * @param {String} emoji
- * @param {Object} emojiObject
- */
- addToFrequentAndSelectEmoji(emoji, emojiObject) {
- const frequentEmojiList = EmojiUtils.getFrequentlyUsedEmojis(emojiObject);
- User.updateFrequentlyUsedEmojis(frequentEmojiList);
- this.props.onEmojiSelected(emoji, emojiObject);
- }
-
/**
* Focuses the search Input and has the text selected
*/
@@ -466,7 +456,7 @@ class EmojiPickerMenu extends Component {
return (
this.addToFrequentAndSelectEmoji(emoji, item)}
+ onPress={(emoji) => this.props.onEmojiSelected(emoji, item)}
onHoverIn={() => this.setState({highlightedIndex: index, isUsingKeyboardMovement: false})}
onHoverOut={() => {
if (this.state.arePointerEventsDisabled) {
diff --git a/src/components/EmojiPicker/EmojiPickerMenu/index.native.js b/src/components/EmojiPicker/EmojiPickerMenu/index.native.js
index dd5c18439cc1..fe8c3e275ad2 100644
--- a/src/components/EmojiPicker/EmojiPickerMenu/index.native.js
+++ b/src/components/EmojiPicker/EmojiPickerMenu/index.native.js
@@ -86,16 +86,6 @@ function EmojiPickerMenu({preferredLocale, onEmojiSelected, preferredSkinTone, t
setHeaderIndices(undefined);
}, 300);
- /**
- * @param {String} emoji
- * @param {Object} emojiObject
- */
- const addToFrequentAndSelectEmoji = (emoji, emojiObject) => {
- const frequentEmojiList = EmojiUtils.getFrequentlyUsedEmojis(emojiObject);
- User.updateFrequentlyUsedEmojis(frequentEmojiList);
- onEmojiSelected(emoji, emojiObject);
- };
-
/**
* @param {Number} skinTone
*/
@@ -152,7 +142,7 @@ function EmojiPickerMenu({preferredLocale, onEmojiSelected, preferredSkinTone, t
return (
addToFrequentAndSelectEmoji(emoji, item))}
+ onPress={singleExecution((emoji) => onEmojiSelected(emoji, item))}
emoji={emojiCode}
/>
);
diff --git a/src/components/EmojiPicker/EmojiSkinToneList.js b/src/components/EmojiPicker/EmojiSkinToneList.js
index a239f197cdd0..0c876910e746 100644
--- a/src/components/EmojiPicker/EmojiSkinToneList.js
+++ b/src/components/EmojiPicker/EmojiSkinToneList.js
@@ -46,11 +46,11 @@ function EmojiSkinToneList(props) {
{!isSkinToneListVisible && (
-
+
{currentSkinTone.code}
{props.translate('emojiPicker.skinTonePickerLabel')}
diff --git a/src/components/Form.js b/src/components/Form.js
index 9836bd818536..b4e639dcf964 100644
--- a/src/components/Form.js
+++ b/src/components/Form.js
@@ -76,6 +76,10 @@ const propTypes = {
/** Container styles */
style: stylePropTypes,
+ /** Submit button container styles */
+ // eslint-disable-next-line react/forbid-prop-types
+ submitButtonStyles: PropTypes.arrayOf(PropTypes.object),
+
/** Custom content to display in the footer after submit button */
footerContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
@@ -98,6 +102,7 @@ const defaultProps = {
shouldValidateOnBlur: true,
footerContent: null,
style: [],
+ submitButtonStyles: [],
validate: () => ({}),
};
@@ -447,7 +452,7 @@ function Form(props) {
focusInput.focus();
}
}}
- containerStyles={[styles.mh0, styles.mt5, styles.flex1]}
+ containerStyles={[styles.mh0, styles.mt5, styles.flex1, ...props.submitButtonStyles]}
enabledWhenOffline={props.enabledWhenOffline}
isSubmitActionDangerous={props.isSubmitActionDangerous}
disablePressOnEnter
@@ -472,6 +477,7 @@ function Form(props) {
props.isSubmitActionDangerous,
props.isSubmitButtonVisible,
props.submitButtonText,
+ props.submitButtonStyles,
],
);
diff --git a/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js b/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js
index bba62cc4f4e0..c806bedc31c7 100755
--- a/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js
+++ b/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js
@@ -5,8 +5,8 @@ import PropTypes from 'prop-types';
import htmlRenderers from './HTMLRenderers';
import * as HTMLEngineUtils from './htmlEngineUtils';
import styles from '../../styles/styles';
-import fontFamily from '../../styles/fontFamily';
import convertToLTR from '../../libs/convertToLTR';
+import singleFontFamily from '../../styles/fontFamily/singleFontFamily';
const propTypes = {
/** Whether text elements should be selectable */
@@ -60,18 +60,13 @@ function BaseHTMLEngineProvider(props) {
// We need to memoize this prop to make it referentially stable.
const defaultTextProps = useMemo(() => ({selectable: props.textSelectable, allowFontScaling: false, textBreakStrategy: 'simple'}), [props.textSelectable]);
- // We need to pass multiple system-specific fonts for emojis but
- // we can't apply multiple fonts at once so we need to pass fallback fonts.
- const fallbackFonts = {'ExpensifyNeue-Regular': fontFamily.EXP_NEUE};
-
return (
(text.data = convertToLTR(text.data)),
diff --git a/src/components/HeaderPageLayout.js b/src/components/HeaderPageLayout.js
index 37c7eb18dad1..adfe0a8784e2 100644
--- a/src/components/HeaderPageLayout.js
+++ b/src/components/HeaderPageLayout.js
@@ -31,16 +31,26 @@ const propTypes = {
/** Style to apply to the header image container */
// eslint-disable-next-line react/forbid-prop-types
headerContainerStyles: PropTypes.arrayOf(PropTypes.object),
+
+ /** Style to apply to the ScrollView container */
+ // eslint-disable-next-line react/forbid-prop-types
+ scrollViewContainerStyles: PropTypes.arrayOf(PropTypes.object),
+
+ /** Style to apply to the children container */
+ // eslint-disable-next-line react/forbid-prop-types
+ childrenContainerStyles: PropTypes.arrayOf(PropTypes.object),
};
const defaultProps = {
backgroundColor: themeColors.appBG,
header: null,
headerContainerStyles: [],
+ scrollViewContainerStyles: [],
+ childrenContainerStyles: [],
footer: null,
};
-function HeaderPageLayout({backgroundColor, children, footer, headerContainerStyles, style, headerContent, ...propsToPassToHeader}) {
+function HeaderPageLayout({backgroundColor, children, footer, headerContainerStyles, scrollViewContainerStyles, childrenContainerStyles, style, headerContent, ...propsToPassToHeader}) {
const {windowHeight, isSmallScreenWidth} = useWindowDimensions();
const {isOffline} = useNetwork();
const appBGColor = StyleUtils.getBackgroundColorStyle(themeColors.appBG);
@@ -77,14 +87,14 @@ function HeaderPageLayout({backgroundColor, children, footer, headerContainerSty
)}
{!Browser.isSafari() && }
{headerContent}
- {children}
+ {children}
{!_.isNull(footer) && {footer}}
diff --git a/src/components/IllustratedHeaderPageLayout.js b/src/components/IllustratedHeaderPageLayout.js
index ac916117094b..c45f5e2452dd 100644
--- a/src/components/IllustratedHeaderPageLayout.js
+++ b/src/components/IllustratedHeaderPageLayout.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import Lottie from 'lottie-react-native';
+import Lottie from './Lottie';
import headerWithBackButtonPropTypes from './HeaderWithBackButton/headerWithBackButtonPropTypes';
import styles from '../styles/styles';
import themeColors from '../styles/themes/default';
diff --git a/src/components/LHNOptionsList/LHNOptionsList.js b/src/components/LHNOptionsList/LHNOptionsList.js
index 7433c2798879..5e07b487c4f7 100644
--- a/src/components/LHNOptionsList/LHNOptionsList.js
+++ b/src/components/LHNOptionsList/LHNOptionsList.js
@@ -79,6 +79,7 @@ function LHNOptionsList({style, contentContainerStyles, data, onSelectRow, optio
contentContainerStyle={contentContainerStyles}
showsVerticalScrollIndicator={false}
data={data}
+ testID="lhn-options-list"
keyExtractor={(item) => item}
stickySectionHeadersEnabled={false}
renderItem={renderItem}
diff --git a/src/components/LHNOptionsList/OptionRowLHN.js b/src/components/LHNOptionsList/OptionRowLHN.js
index e9f7bbd30596..4e6564646cac 100644
--- a/src/components/LHNOptionsList/OptionRowLHN.js
+++ b/src/components/LHNOptionsList/OptionRowLHN.js
@@ -179,6 +179,7 @@ function OptionRowLHN(props) {
// Prevent composer blur on left click
e.preventDefault();
}}
+ testID={optionItem.reportID}
onSecondaryInteraction={(e) => showPopover(e)}
withoutFocusOnSecondaryInteraction
activeOpacity={0.8}
diff --git a/src/components/Lottie/Lottie.tsx b/src/components/Lottie/Lottie.tsx
new file mode 100644
index 000000000000..97c7e8fffdd1
--- /dev/null
+++ b/src/components/Lottie/Lottie.tsx
@@ -0,0 +1,14 @@
+import React, {forwardRef} from 'react';
+import LottieView, {LottieViewProps} from 'lottie-react-native';
+import styles from '../../styles/styles';
+
+const Lottie = forwardRef((props: LottieViewProps, ref) => (
+
+));
+
+export default Lottie;
diff --git a/src/components/Lottie/index.js b/src/components/Lottie/index.js
new file mode 100644
index 000000000000..ec4ae54b355d
--- /dev/null
+++ b/src/components/Lottie/index.js
@@ -0,0 +1,3 @@
+import Lottie from './Lottie';
+
+export default Lottie;
diff --git a/src/components/LottieAnimations.js b/src/components/LottieAnimations.js
index 274d60306393..167b1078c3ca 100644
--- a/src/components/LottieAnimations.js
+++ b/src/components/LottieAnimations.js
@@ -6,5 +6,6 @@ const ReviewingBankInfo = require('../../assets/animations/ReviewingBankInfo.jso
const WorkspacePlanet = require('../../assets/animations/WorkspacePlanet.json');
const SaveTheWorld = require('../../assets/animations/SaveTheWorld.json');
const Safe = require('../../assets/animations/Safe.json');
+const Magician = require('../../assets/animations/Magician.json');
-export {ExpensifyLounge, Fireworks, Hands, PreferencesDJ, ReviewingBankInfo, SaveTheWorld, WorkspacePlanet, Safe};
+export {ExpensifyLounge, Fireworks, Hands, PreferencesDJ, ReviewingBankInfo, SaveTheWorld, WorkspacePlanet, Safe, Magician};
diff --git a/src/components/MagicCodeInput.js b/src/components/MagicCodeInput.js
index 454aacc8a03b..dcaa0273f96a 100644
--- a/src/components/MagicCodeInput.js
+++ b/src/components/MagicCodeInput.js
@@ -30,7 +30,7 @@ const propTypes = {
errorText: PropTypes.string,
/** Specifies autocomplete hints for the system, so it can provide autofill */
- autoComplete: PropTypes.oneOf(['sms-otp', 'one-time-code']).isRequired,
+ autoComplete: PropTypes.oneOf(['sms-otp', 'one-time-code', 'off']).isRequired,
/* Should submit when the input is complete */
shouldSubmitOnComplete: PropTypes.bool,
@@ -48,6 +48,12 @@ const propTypes = {
/** Specifies the max length of the input */
maxLength: PropTypes.number,
+
+ /** Specifies if the keyboard should be disabled */
+ isDisableKeyboard: PropTypes.bool,
+
+ /** Last pressed digit on BigDigitPad */
+ lastPressedDigit: PropTypes.string,
};
const defaultProps = {
@@ -61,6 +67,8 @@ const defaultProps = {
onFulfill: () => {},
hasError: false,
maxLength: CONST.MAGIC_CODE_LENGTH,
+ isDisableKeyboard: false,
+ lastPressedDigit: '',
};
/**
@@ -190,9 +198,21 @@ function MagicCodeInput(props) {
* @param {Object} event
*/
const onKeyPress = ({nativeEvent: {key: keyValue}}) => {
- if (keyValue === 'Backspace') {
+ if (keyValue === 'Backspace' || keyValue === '<') {
let numbers = decomposeString(props.value, props.maxLength);
+ // If keyboard is disabled and no input is focused we need to remove
+ // the last entered digit and focus on the correct input
+ if (props.isDisableKeyboard && focusedIndex === undefined) {
+ const indexBeforeLastEditIndex = editIndex === 0 ? editIndex : editIndex - 1;
+
+ const indexToFocus = numbers[editIndex] === CONST.MAGIC_CODE_EMPTY_CHAR ? indexBeforeLastEditIndex : editIndex;
+ inputRefs.current[indexToFocus].focus();
+ props.onChangeText(props.value.substring(0, indexToFocus));
+
+ return;
+ }
+
// If the currently focused index already has a value, it will delete
// that value but maintain the focus on the same input.
if (numbers[focusedIndex] !== CONST.MAGIC_CODE_EMPTY_CHAR) {
@@ -237,13 +257,34 @@ function MagicCodeInput(props) {
}
};
+ /**
+ * If isDisableKeyboard is true we will have to call onKeyPress and onChangeText manually
+ * as the press on digit pad will not trigger native events. We take lastPressedDigit from props
+ * as it stores the last pressed digit pressed on digit pad. We take only the first character
+ * as anything after that is added to differentiate between two same digits passed in a row.
+ */
+
+ useEffect(() => {
+ if (!props.isDisableKeyboard) {
+ return;
+ }
+
+ const value = props.lastPressedDigit.charAt(0);
+ onKeyPress({nativeEvent: {key: value}});
+ onChangeText(value);
+
+ // We have not added:
+ // + the onChangeText and onKeyPress as the dependencies because we only want to run this when lastPressedDigit changes.
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [props.lastPressedDigit, props.isDisableKeyboard]);
+
return (
<>
{_.map(getInputPlaceholderSlots(props.maxLength), (index) => (
{
)}
{Boolean(props.title) && (Boolean(props.shouldRenderAsHTML) || (Boolean(props.shouldParseTitle) && Boolean(html.length))) && (
-
+
+
+
)}
{!props.shouldRenderAsHTML && !props.shouldParseTitle && Boolean(props.title) && (
-
-
- );
-}
-
-MenuItemRenderHTMLTitle.propTypes = propTypes;
-MenuItemRenderHTMLTitle.defaultProps = defaultProps;
-MenuItemRenderHTMLTitle.displayName = 'MenuItemRenderHTMLTitle';
-
-export default MenuItemRenderHTMLTitle;
diff --git a/src/components/MenuItemRenderHTMLTitle/index.native.js b/src/components/MenuItemRenderHTMLTitle/index.native.js
deleted file mode 100644
index b3dff8d77eff..000000000000
--- a/src/components/MenuItemRenderHTMLTitle/index.native.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import RenderHTML from '../RenderHTML';
-import menuItemRenderHTMLTitlePropTypes from './propTypes';
-
-const propTypes = menuItemRenderHTMLTitlePropTypes;
-
-const defaultProps = {};
-
-function MenuItemRenderHTMLTitle(props) {
- return ;
-}
-
-MenuItemRenderHTMLTitle.propTypes = propTypes;
-MenuItemRenderHTMLTitle.defaultProps = defaultProps;
-MenuItemRenderHTMLTitle.displayName = 'MenuItemRenderHTMLTitle';
-
-export default MenuItemRenderHTMLTitle;
diff --git a/src/components/MenuItemRenderHTMLTitle/propTypes.js b/src/components/MenuItemRenderHTMLTitle/propTypes.js
deleted file mode 100644
index 68e279eb28c3..000000000000
--- a/src/components/MenuItemRenderHTMLTitle/propTypes.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import PropTypes from 'prop-types';
-
-const propTypes = {
- /** Processed title to display for the MenuItem */
- title: PropTypes.string.isRequired,
-};
-
-export default propTypes;
diff --git a/src/components/MoneyReportHeader.js b/src/components/MoneyReportHeader.js
index dded77d5e30f..6b2b4e16db65 100644
--- a/src/components/MoneyReportHeader.js
+++ b/src/components/MoneyReportHeader.js
@@ -69,16 +69,19 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, report
const isPolicyAdmin = policyType !== CONST.POLICY.TYPE.PERSONAL && lodashGet(policy, 'role') === CONST.POLICY.ROLE.ADMIN;
const isManager = ReportUtils.isMoneyRequestReport(moneyRequestReport) && lodashGet(session, 'accountID', null) === moneyRequestReport.managerID;
const isPayer = policyType === CONST.POLICY.TYPE.CORPORATE ? isPolicyAdmin && isApproved : isPolicyAdmin || (ReportUtils.isMoneyRequestReport(moneyRequestReport) && isManager);
+ const isDraft = ReportUtils.isReportDraft(moneyRequestReport);
const shouldShowSettlementButton = useMemo(
- () => isPayer && !isSettled && !moneyRequestReport.isWaitingOnBankAccount && reportTotal !== 0 && !ReportUtils.isArchivedRoom(chatReport),
- [isPayer, isSettled, moneyRequestReport, reportTotal, chatReport],
+ () => isPayer && !isDraft && !isSettled && !moneyRequestReport.isWaitingOnBankAccount && reportTotal !== 0 && !ReportUtils.isArchivedRoom(chatReport),
+ [isPayer, isDraft, isSettled, moneyRequestReport, reportTotal, chatReport],
);
const shouldShowApproveButton = useMemo(() => {
if (policyType !== CONST.POLICY.TYPE.CORPORATE) {
return false;
}
- return isManager && !isApproved && !isSettled;
- }, [policyType, isManager, isApproved, isSettled]);
+ return isManager && !isDraft && !isApproved && !isSettled;
+ }, [policyType, isManager, isDraft, isApproved, isSettled]);
+ const shouldShowSubmitButton = isDraft && reportTotal !== 0;
+ const shouldShowAnyButton = shouldShowSettlementButton || shouldShowApproveButton || shouldShowSubmitButton;
const bankAccountRoute = ReportUtils.getBankAccountRoute(chatReport);
const formattedAmount = CurrencyUtils.convertToDisplayString(reportTotal, moneyRequestReport.currency);
@@ -93,10 +96,10 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, report
personalDetails={personalDetails}
shouldShowBackButton={isSmallScreenWidth}
onBackButtonPress={() => Navigation.goBack(ROUTES.HOME, false, true)}
- shouldShowBorderBottom={!shouldShowSettlementButton || !isSmallScreenWidth}
+ shouldShowBorderBottom={!shouldShowAnyButton || !isSmallScreenWidth}
>
{shouldShowSettlementButton && !isSmallScreenWidth && (
-
+
)}
{shouldShowApproveButton && !isSmallScreenWidth && (
-
+
)}
+ {shouldShowSubmitButton && !isSmallScreenWidth && (
+
+
+ )}
{shouldShowSettlementButton && isSmallScreenWidth && (
@@ -153,6 +167,17 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, report
/>
)}
+ {shouldShowSubmitButton && isSmallScreenWidth && (
+
+
+ )}
);
}
diff --git a/src/components/MoneyRequestConfirmationList.js b/src/components/MoneyRequestConfirmationList.js
index e3329532f324..acaa83181bbf 100755
--- a/src/components/MoneyRequestConfirmationList.js
+++ b/src/components/MoneyRequestConfirmationList.js
@@ -114,8 +114,8 @@ const propTypes = {
/** File path of the receipt */
receiptPath: PropTypes.string,
- /** File source of the receipt */
- receiptSource: PropTypes.string,
+ /** File name of the receipt */
+ receiptFilename: PropTypes.string,
/** List styles for OptionsSelector */
listStyles: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.object), PropTypes.object]),
@@ -141,6 +141,9 @@ const propTypes = {
/** Whether the money request is a distance request */
isDistanceRequest: PropTypes.bool,
+ /** Whether the receipt associated with this report is being scanned */
+ isScanning: PropTypes.bool,
+
/** A flag for verifying that the current report is a sub-report of a workspace chat */
isPolicyExpenseChat: PropTypes.bool,
@@ -171,7 +174,7 @@ const defaultProps = {
reportID: '',
...withCurrentUserPersonalDetailsDefaultProps,
receiptPath: '',
- receiptSource: '',
+ receiptFilename: '',
listStyles: [],
policyCategories: {},
policyTags: {},
@@ -179,6 +182,7 @@ const defaultProps = {
transaction: {},
mileageRate: {unit: CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate: 0, currency: 'USD'},
isDistanceRequest: false,
+ isScanning: false,
isPolicyExpenseChat: false,
};
@@ -188,9 +192,6 @@ function MoneyRequestConfirmationList(props) {
const {onSendMoney, onConfirm, onSelectParticipant, transaction} = props;
const {translate, toLocaleDigit} = useLocalize();
- // A flag and a toggler for showing the rest of the form fields
- const [shouldExpandFields, toggleShouldExpandFields] = useReducer((state) => !state, false);
- const shouldShowAllFields = props.isDistanceRequest || shouldExpandFields;
const isTypeRequest = props.iouType === CONST.IOU.MONEY_REQUEST_TYPE.REQUEST;
const {unit, rate, currency} = props.mileageRate;
@@ -201,6 +202,14 @@ function MoneyRequestConfirmationList(props) {
const shouldShowCategories =
props.isPolicyExpenseChat && Permissions.canUseCategories(props.betas) && (props.iouCategory || OptionsListUtils.hasEnabledOptions(_.values(props.policyCategories)));
+ // A flag for showing SmartScan fields: date, merchant, and amount, only when we don't have a receiptPath (e.g. manual request)
+ // or in the split details page which is ReadOnly
+ const shouldShowSmartScanFields = (!props.receiptPath || props.isReadOnly) && !props.isScanning;
+
+ // A flag and a toggler for showing the rest of the form fields
+ const [shouldExpandFields, toggleShouldExpandFields] = useReducer((state) => !state, false);
+ const shouldShowAllFields = props.isDistanceRequest || shouldExpandFields || !shouldShowSmartScanFields;
+
// Fetches the first tag list of the policy
const policyTag = PolicyUtils.getTag(props.policyTags);
const policyTagList = lodashGet(policyTag, 'tags', {});
@@ -245,7 +254,10 @@ function MoneyRequestConfirmationList(props) {
const getParticipantsWithAmount = useCallback(
(participantsList) => {
const iouAmount = IOUUtils.calculateAmount(participantsList.length, props.iouAmount, props.iouCurrencyCode);
- return OptionsListUtils.getIOUConfirmationOptionsFromParticipants(participantsList, CurrencyUtils.convertToDisplayString(iouAmount, props.iouCurrencyCode));
+ return OptionsListUtils.getIOUConfirmationOptionsFromParticipants(
+ participantsList,
+ props.iouAmount > 0 ? CurrencyUtils.convertToDisplayString(iouAmount, props.iouCurrencyCode) : '',
+ );
},
[props.iouAmount, props.iouCurrencyCode],
);
@@ -254,7 +266,9 @@ function MoneyRequestConfirmationList(props) {
const splitOrRequestOptions = useMemo(() => {
let text;
- if (props.receiptPath || isDistanceRequestWithoutRoute) {
+ if (props.receiptPath && props.hasMultipleParticipants && props.iouAmount === 0) {
+ text = translate('iou.split');
+ } else if (props.receiptPath || isDistanceRequestWithoutRoute) {
text = translate('iou.request');
} else {
const translationKey = props.hasMultipleParticipants ? 'iou.splitAmount' : 'iou.requestAmount';
@@ -266,7 +280,7 @@ function MoneyRequestConfirmationList(props) {
value: props.hasMultipleParticipants ? CONST.IOU.MONEY_REQUEST_TYPE.SPLIT : CONST.IOU.MONEY_REQUEST_TYPE.REQUEST,
},
];
- }, [props.hasMultipleParticipants, props.receiptPath, translate, formattedAmount, isDistanceRequestWithoutRoute]);
+ }, [props.hasMultipleParticipants, props.iouAmount, props.receiptPath, translate, formattedAmount, isDistanceRequestWithoutRoute]);
const selectedParticipants = useMemo(() => _.filter(props.selectedParticipants, (participant) => participant.selected), [props.selectedParticipants]);
const payeePersonalDetails = useMemo(() => props.payeePersonalDetails || props.currentUserPersonalDetails, [props.payeePersonalDetails, props.currentUserPersonalDetails]);
@@ -290,7 +304,7 @@ function MoneyRequestConfirmationList(props) {
const myIOUAmount = IOUUtils.calculateAmount(selectedParticipants.length, props.iouAmount, props.iouCurrencyCode, true);
const formattedPayeeOption = OptionsListUtils.getIOUConfirmationOptionsFromPayeePersonalDetail(
payeePersonalDetails,
- CurrencyUtils.convertToDisplayString(myIOUAmount, props.iouCurrencyCode),
+ props.iouAmount > 0 ? CurrencyUtils.convertToDisplayString(myIOUAmount, props.iouCurrencyCode) : '',
);
sections.push(
@@ -459,6 +473,9 @@ function MoneyRequestConfirmationList(props) {
);
}, [confirm, props.bankAccountRoute, props.iouCurrencyCode, props.iouType, props.isReadOnly, props.policyID, selectedParticipants, splitOrRequestOptions, translate, formError]);
+ const {image: receiptImage, thumbnail: receiptThumbnail} =
+ props.receiptPath && props.receiptFilename ? ReceiptUtils.getThumbnailAndImageURIs(props.receiptPath, props.receiptFilename) : {};
+
return (
)}
- {!_.isEmpty(props.receiptPath) ? (
+ {(receiptImage || receiptThumbnail) && (
- ) : (
+ )}
+ {shouldShowSmartScanFields && (
- Navigation.navigate(ROUTES.MONEY_REQUEST_DATE.getRoute(props.iouType, props.reportID))}
- disabled={didConfirm || props.isReadOnly || !isTypeRequest}
- />
- {props.isDistanceRequest ? (
+ {shouldShowSmartScanFields && (
+ Navigation.navigate(ROUTES.MONEY_REQUEST_DATE.getRoute(props.iouType, props.reportID))}
+ disabled={didConfirm || props.isReadOnly}
+ />
+ )}
+ {props.isDistanceRequest && (
Navigation.navigate(ROUTES.MONEY_REQUEST_DISTANCE.getRoute(props.iouType, props.reportID))}
disabled={didConfirm || props.isReadOnly || !isTypeRequest}
/>
- ) : (
+ )}
+ {shouldShowSmartScanFields && (
Navigation.navigate(ROUTES.MONEY_REQUEST_MERCHANT.getRoute(props.iouType, props.reportID))}
- disabled={didConfirm || props.isReadOnly || !isTypeRequest}
+ disabled={didConfirm || props.isReadOnly}
/>
)}
{shouldShowCategories && (
diff --git a/src/components/MoneyRequestHeaderStatusBar.js b/src/components/MoneyRequestHeaderStatusBar.js
index a4f21e3d168d..499fa1433e05 100644
--- a/src/components/MoneyRequestHeaderStatusBar.js
+++ b/src/components/MoneyRequestHeaderStatusBar.js
@@ -8,7 +8,7 @@ function MoneyRequestHeaderStatusBar() {
const {translate} = useLocalize();
return (
-
+
{translate('iou.receiptStatusTitle')}
diff --git a/src/components/OptionRow.js b/src/components/OptionRow.js
index 47ab4fe45db1..85d3e83c1360 100644
--- a/src/components/OptionRow.js
+++ b/src/components/OptionRow.js
@@ -70,6 +70,9 @@ const propTypes = {
/** Whether to remove the lateral padding and align the content with the margins */
shouldDisableRowInnerPadding: PropTypes.bool,
+ /** Whether to prevent default focusing on select */
+ shouldPreventDefaultFocusOnSelectRow: PropTypes.bool,
+
/** Whether to wrap large text up to 2 lines */
isMultilineSupported: PropTypes.bool,
@@ -95,6 +98,7 @@ const defaultProps = {
style: null,
shouldHaveOptionSeparator: false,
shouldDisableRowInnerPadding: false,
+ shouldPreventDefaultFocusOnSelectRow: false,
};
class OptionRow extends Component {
@@ -213,6 +217,7 @@ class OptionRow extends Component {
hoverDimmingValue={1}
hoverStyle={this.props.hoverStyle}
needsOffscreenAlphaCompositing={lodashGet(this.props.option, 'icons.length', 0) >= 2}
+ onMouseDown={this.props.shouldPreventDefaultFocusOnSelectRow ? (e) => e.preventDefault() : undefined}
>
diff --git a/src/components/OptionsList/BaseOptionsList.js b/src/components/OptionsList/BaseOptionsList.js
index 5a40c28a86c9..23049b65f198 100644
--- a/src/components/OptionsList/BaseOptionsList.js
+++ b/src/components/OptionsList/BaseOptionsList.js
@@ -54,6 +54,7 @@ function BaseOptionsList({
showScrollIndicator,
listContainerStyles,
shouldDisableRowInnerPadding,
+ shouldPreventDefaultFocusOnSelectRow,
disableFocusOptions,
canSelectMultipleOptions,
shouldShowMultipleOptionSelectorAsButton,
@@ -206,6 +207,7 @@ function BaseOptionsList({
isDisabled={isItemDisabled}
shouldHaveOptionSeparator={index > 0 && shouldHaveOptionSeparator}
shouldDisableRowInnerPadding={shouldDisableRowInnerPadding}
+ shouldPreventDefaultFocusOnSelectRow={shouldPreventDefaultFocusOnSelectRow}
isMultilineSupported={isRowMultilineSupported}
/>
);
diff --git a/src/components/OptionsList/optionsListPropTypes.js b/src/components/OptionsList/optionsListPropTypes.js
index a2479c878041..165cec699b80 100644
--- a/src/components/OptionsList/optionsListPropTypes.js
+++ b/src/components/OptionsList/optionsListPropTypes.js
@@ -79,6 +79,9 @@ const propTypes = {
/** Whether to disable the inner padding in rows */
shouldDisableRowInnerPadding: PropTypes.bool,
+ /** Whether to prevent default focusing when selecting a row */
+ shouldPreventDefaultFocusOnSelectRow: PropTypes.bool,
+
/** Whether to show the scroll bar */
showScrollIndicator: PropTypes.bool,
@@ -107,6 +110,7 @@ const defaultProps = {
onLayout: undefined,
shouldHaveOptionSeparator: false,
shouldDisableRowInnerPadding: false,
+ shouldPreventDefaultFocusOnSelectRow: false,
showScrollIndicator: false,
isRowMultilineSupported: false,
};
diff --git a/src/components/OptionsSelector/BaseOptionsSelector.js b/src/components/OptionsSelector/BaseOptionsSelector.js
index 1d0105394042..e72bb7ef4b8e 100755
--- a/src/components/OptionsSelector/BaseOptionsSelector.js
+++ b/src/components/OptionsSelector/BaseOptionsSelector.js
@@ -54,6 +54,7 @@ class BaseOptionsSelector extends Component {
this.selectRow = this.selectRow.bind(this);
this.selectFocusedOption = this.selectFocusedOption.bind(this);
this.addToSelection = this.addToSelection.bind(this);
+ this.updateSearchValue = this.updateSearchValue.bind(this);
this.relatedTarget = null;
const allOptions = this.flattenSections();
@@ -63,6 +64,7 @@ class BaseOptionsSelector extends Component {
allOptions,
focusedIndex,
shouldDisableRowSelection: false,
+ errorMessage: '',
};
}
@@ -70,7 +72,7 @@ class BaseOptionsSelector extends Component {
this.subscribeToKeyboardShortcut();
if (this.props.isFocused && this.props.autoFocus && this.textInput) {
- setTimeout(() => {
+ this.focusTimeout = setTimeout(() => {
this.textInput.focus();
}, CONST.ANIMATED_TRANSITION);
}
@@ -167,6 +169,14 @@ class BaseOptionsSelector extends Component {
return defaultIndex;
}
+ updateSearchValue(value) {
+ this.setState({
+ errorMessage: value.length > this.props.maxLength ? this.props.translate('common.error.characterLimitExceedCounter', {length: value.length, limit: this.props.maxLength}) : '',
+ });
+
+ this.props.onChangeText(value);
+ }
+
subscribeToKeyboardShortcut() {
const enterConfig = CONST.KEYBOARD_SHORTCUTS.ENTER;
this.unsubscribeEnter = KeyboardShortcut.subscribe(
@@ -316,7 +326,7 @@ class BaseOptionsSelector extends Component {
*/
selectRow(option, ref) {
return new Promise((resolve) => {
- if (this.props.shouldShowTextInput && this.props.shouldFocusOnSelectRow) {
+ if (this.props.shouldShowTextInput && this.props.shouldPreventDefaultFocusOnSelectRow) {
if (this.relatedTarget && ref === this.relatedTarget) {
this.textInput.focus();
this.relatedTarget = null;
@@ -344,7 +354,7 @@ class BaseOptionsSelector extends Component {
* @param {Object} option
*/
addToSelection(option) {
- if (this.props.shouldShowTextInput && this.props.shouldFocusOnSelectRow) {
+ if (this.props.shouldShowTextInput && this.props.shouldPreventDefaultFocusOnSelectRow) {
this.textInput.focus();
if (this.textInput.isFocused()) {
setSelection(this.textInput, 0, this.props.value.length);
@@ -366,13 +376,14 @@ class BaseOptionsSelector extends Component {
label={this.props.textInputLabel}
accessibilityLabel={this.props.textInputLabel}
accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
- onChangeText={this.props.onChangeText}
+ onChangeText={this.updateSearchValue}
+ errorText={this.state.errorMessage}
onSubmitEditing={this.selectFocusedOption}
placeholder={this.props.placeholderText}
- maxLength={this.props.maxLength}
+ maxLength={this.props.maxLength + CONST.ADDITIONAL_ALLOWED_CHARACTERS}
keyboardType={this.props.keyboardType}
onBlur={(e) => {
- if (!this.props.shouldFocusOnSelectRow) {
+ if (!this.props.shouldPreventDefaultFocusOnSelectRow) {
return;
}
this.relatedTarget = e.relatedTarget;
@@ -396,7 +407,7 @@ class BaseOptionsSelector extends Component {
multipleOptionSelectorButtonText={this.props.multipleOptionSelectorButtonText}
onAddToSelection={this.addToSelection}
hideSectionHeaders={this.props.hideSectionHeaders}
- headerMessage={this.props.headerMessage}
+ headerMessage={this.state.errorMessage ? '' : this.props.headerMessage}
boldStyle={this.props.boldStyle}
showTitleTooltip={this.props.showTitleTooltip}
isDisabled={this.props.isDisabled}
@@ -417,6 +428,7 @@ class BaseOptionsSelector extends Component {
isLoading={!this.props.shouldShowOptions}
showScrollIndicator={this.props.showScrollIndicator}
isRowMultilineSupported={this.props.isRowMultilineSupported}
+ shouldPreventDefaultFocusOnSelectRow={this.props.shouldPreventDefaultFocusOnSelectRow}
/>
);
return (
diff --git a/src/components/OptionsSelector/optionsSelectorPropTypes.js b/src/components/OptionsSelector/optionsSelectorPropTypes.js
index 8a7158092967..9e028510e608 100644
--- a/src/components/OptionsSelector/optionsSelectorPropTypes.js
+++ b/src/components/OptionsSelector/optionsSelectorPropTypes.js
@@ -1,6 +1,7 @@
import PropTypes from 'prop-types';
import optionPropTypes from '../optionPropTypes';
import styles from '../../styles/styles';
+import CONST from '../../CONST';
const propTypes = {
/** Callback to fire when a row is tapped */
@@ -80,8 +81,8 @@ const propTypes = {
/** Whether to show the title tooltip */
showTitleTooltip: PropTypes.bool,
- /** Whether to focus the textinput after an option is selected */
- shouldFocusOnSelectRow: PropTypes.bool,
+ /** Whether to prevent default focusing of options and focus the textinput when selecting an option */
+ shouldPreventDefaultFocusOnSelectRow: PropTypes.bool,
/** Whether to autofocus the search input on mount */
autoFocus: PropTypes.bool,
@@ -144,7 +145,7 @@ const defaultProps = {
hideSectionHeaders: false,
boldStyle: false,
showTitleTooltip: false,
- shouldFocusOnSelectRow: false,
+ shouldPreventDefaultFocusOnSelectRow: false,
autoFocus: true,
shouldShowConfirmButton: false,
confirmButtonText: undefined,
@@ -157,7 +158,7 @@ const defaultProps = {
isDisabled: false,
shouldHaveOptionSeparator: false,
initiallyFocusedOptionKey: undefined,
- maxLength: undefined,
+ maxLength: CONST.SEARCH_MAX_LENGTH,
shouldShowTextInput: true,
onChangeText: () => {},
shouldUseStyleForChildren: true,
diff --git a/src/components/PopoverWithoutOverlay/index.js b/src/components/PopoverWithoutOverlay/index.js
index d35637958f1d..3b194ad4b9cf 100644
--- a/src/components/PopoverWithoutOverlay/index.js
+++ b/src/components/PopoverWithoutOverlay/index.js
@@ -8,7 +8,6 @@ import styles from '../../styles/styles';
import * as StyleUtils from '../../styles/StyleUtils';
import getModalStyles from '../../styles/getModalStyles';
import withWindowDimensions from '../withWindowDimensions';
-import usePrevious from '../../hooks/usePrevious';
function Popover(props) {
const {onOpen, close} = React.useContext(PopoverContext);
@@ -25,8 +24,6 @@ function Popover(props) {
props.outerStyle,
);
- const prevIsVisible = usePrevious(props.isVisible);
-
React.useEffect(() => {
if (props.isVisible) {
props.onModalShow();
@@ -43,7 +40,7 @@ function Popover(props) {
Modal.willAlertModalBecomeVisible(props.isVisible);
// We prevent setting closeModal function to null when the component is invisible the first time it is rendered
- if (prevIsVisible === props.isVisible && (!firstRenderRef.current || !props.isVisible)) {
+ if (!firstRenderRef.current || !props.isVisible) {
firstRenderRef.current = false;
return;
}
@@ -52,7 +49,7 @@ function Popover(props) {
// We want this effect to run strictly ONLY when isVisible prop changes
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [props.isVisible, prevIsVisible]);
+ }, [props.isVisible]);
if (!props.isVisible) {
return null;
diff --git a/src/components/Pressable/GenericPressable/BaseGenericPressable.js b/src/components/Pressable/GenericPressable/BaseGenericPressable.js
index 9bb221b2de1e..79ce5629c9e9 100644
--- a/src/components/Pressable/GenericPressable/BaseGenericPressable.js
+++ b/src/components/Pressable/GenericPressable/BaseGenericPressable.js
@@ -10,6 +10,7 @@ import styles from '../../../styles/styles';
import genericPressablePropTypes from './PropTypes';
import CONST from '../../../CONST';
import * as StyleUtils from '../../../styles/StyleUtils';
+import useSingleExecution from '../../../hooks/useSingleExecution';
/**
* Returns the cursor style based on the state of Pressable
@@ -44,12 +45,12 @@ const GenericPressable = forwardRef((props, ref) => {
keyboardShortcut,
shouldUseAutoHitSlop,
enableInScreenReaderStates,
- isExecuting,
onPressIn,
onPressOut,
...rest
} = props;
+ const {isExecuting, singleExecution} = useSingleExecution();
const isScreenReaderActive = Accessibility.useScreenReaderStatus();
const [hitSlop, onLayout] = Accessibility.useAutoHitSlop();
@@ -63,8 +64,8 @@ const GenericPressable = forwardRef((props, ref) => {
shouldBeDisabledByScreenReader = isScreenReaderActive;
}
- return props.disabled || shouldBeDisabledByScreenReader;
- }, [isScreenReaderActive, enableInScreenReaderStates, props.disabled]);
+ return props.disabled || shouldBeDisabledByScreenReader || isExecuting;
+ }, [isScreenReaderActive, enableInScreenReaderStates, props.disabled, isExecuting]);
const shouldUseDisabledCursor = useMemo(() => isDisabled && !isExecuting, [isDisabled, isExecuting]);
@@ -134,7 +135,7 @@ const GenericPressable = forwardRef((props, ref) => {
hitSlop={shouldUseAutoHitSlop ? hitSlop : undefined}
onLayout={shouldUseAutoHitSlop ? onLayout : undefined}
ref={ref}
- onPress={!isDisabled ? onPressHandler : undefined}
+ onPress={!isDisabled ? singleExecution(onPressHandler) : undefined}
// In order to prevent haptic feedback, pass empty callback as onLongPress props. Please refer https://github.com/necolas/react-native-web/issues/2349#issuecomment-1195564240
onLongPress={!isDisabled && onLongPress ? onLongPressHandler : defaultLongPressHandler}
onKeyPress={!isDisabled ? onKeyPressHandler : undefined}
diff --git a/src/components/Pressable/GenericPressable/PropTypes.js b/src/components/Pressable/GenericPressable/PropTypes.js
index 690e265b6552..3933b31d2d47 100644
--- a/src/components/Pressable/GenericPressable/PropTypes.js
+++ b/src/components/Pressable/GenericPressable/PropTypes.js
@@ -45,9 +45,6 @@ const pressablePropTypes = {
*/
shouldUseHapticsOnLongPress: PropTypes.bool,
- /** Whether the button is executing */
- isExecuting: PropTypes.bool,
-
/**
* style for when the component is disabled. Can be a function that receives the component's state (active, disabled, hover, focus, pressed, isScreenReaderActive)
* @default {}
@@ -128,7 +125,6 @@ const defaultProps = {
keyboardShortcut: undefined,
shouldUseHapticsOnPress: false,
shouldUseHapticsOnLongPress: false,
- isExecuting: false,
disabledStyle: {},
hoverStyle: {},
focusStyle: {},
diff --git a/src/components/Pressable/PressableWithDelayToggle.js b/src/components/Pressable/PressableWithDelayToggle.js
index 38660e390208..b55770a63196 100644
--- a/src/components/Pressable/PressableWithDelayToggle.js
+++ b/src/components/Pressable/PressableWithDelayToggle.js
@@ -114,7 +114,7 @@ function PressableWithDelayToggle(props) {
focusable={false}
accessible={false}
onPress={updatePressState}
- style={[styles.flexRow, ...props.styles]}
+ style={[styles.flexRow, ...props.styles, !isActive && styles.cursorDefault]}
>
{({hovered, pressed}) => (
<>
diff --git a/src/components/Pressable/PressableWithFeedback.js b/src/components/Pressable/PressableWithFeedback.js
index a80e2109ebd7..07601ed35789 100644
--- a/src/components/Pressable/PressableWithFeedback.js
+++ b/src/components/Pressable/PressableWithFeedback.js
@@ -5,7 +5,6 @@ import GenericPressable from './GenericPressable';
import GenericPressablePropTypes from './GenericPressable/PropTypes';
import OpacityView from '../OpacityView';
import variables from '../../styles/variables';
-import useSingleExecution from '../../hooks/useSingleExecution';
const omittedProps = ['wrapperStyle', 'needsOffscreenAlphaCompositing'];
@@ -43,14 +42,12 @@ const PressableWithFeedbackDefaultProps = {
const PressableWithFeedback = forwardRef((props, ref) => {
const propsWithoutWrapperProps = _.omit(props, omittedProps);
- const {isExecuting, singleExecution} = useSingleExecution();
const [isPressed, setIsPressed] = useState(false);
const [isHovered, setIsHovered] = useState(false);
- const isDisabled = props.disabled || isExecuting;
return (
{
ref={ref}
// eslint-disable-next-line react/jsx-props-no-spreading
{...propsWithoutWrapperProps}
- disabled={isDisabled}
- isExecuting={isExecuting}
+ disabled={props.disabled}
onHoverIn={() => {
setIsHovered(true);
if (props.onHoverIn) {
@@ -85,9 +81,6 @@ const PressableWithFeedback = forwardRef((props, ref) => {
props.onPressOut();
}
}}
- onPress={(e) => {
- singleExecution(() => props.onPress(e))();
- }}
>
{(state) => (_.isFunction(props.children) ? props.children(state) : props.children)}
diff --git a/src/components/QRShare/index.js b/src/components/QRShare/index.js
index d96024ad1046..837adcac8efe 100644
--- a/src/components/QRShare/index.js
+++ b/src/components/QRShare/index.js
@@ -76,7 +76,6 @@ class QRShare extends Component {
{!_.isEmpty(this.props.subtitle) && (
{description}}
- {props.isBillSplit && !_.isEmpty(participantAccountIDs) && (
+ {props.isBillSplit && !_.isEmpty(participantAccountIDs) && requestAmount > 0 && (
{props.translate('iou.amountEach', {
amount: CurrencyUtils.convertToDisplayString(
diff --git a/src/components/ReportActionItem/ReportPreview.js b/src/components/ReportActionItem/ReportPreview.js
index d89d1e02d7a9..f9001ed51258 100644
--- a/src/components/ReportActionItem/ReportPreview.js
+++ b/src/components/ReportActionItem/ReportPreview.js
@@ -136,6 +136,8 @@ function ReportPreview(props) {
scanningReceipts: numberOfScanningReceipts,
});
+ const shouldShowSubmitButton = isReportDraft && reportTotal !== 0;
+
const getDisplayAmount = () => {
if (reportTotal) {
return CurrencyUtils.convertToDisplayString(reportTotal, props.iouReport.currency);
@@ -242,7 +244,7 @@ function ReportPreview(props) {
}}
/>
)}
- {isReportDraft && (
+ {shouldShowSubmitButton && (
)}
- {moneyRequestOptions.includes(CONST.IOU.MONEY_REQUEST_TYPE.REQUEST) && {props.translate('reportActionsView.usePlusButton')}}
+ {(moneyRequestOptions.includes(CONST.IOU.MONEY_REQUEST_TYPE.SEND) || moneyRequestOptions.includes(CONST.IOU.MONEY_REQUEST_TYPE.REQUEST)) && (
+ {props.translate('reportActionsView.usePlusButton')}
+ )}
>
);
@@ -150,9 +148,6 @@ ReportWelcomeText.displayName = 'ReportWelcomeText';
export default compose(
withLocalize,
withOnyx({
- betas: {
- key: ONYXKEYS.BETAS,
- },
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
diff --git a/src/components/SelectionList/BaseListItem.js b/src/components/SelectionList/BaseListItem.js
index 8a42c84ffc67..171a58ee9fa9 100644
--- a/src/components/SelectionList/BaseListItem.js
+++ b/src/components/SelectionList/BaseListItem.js
@@ -13,7 +13,16 @@ import RadioListItem from './RadioListItem';
import OfflineWithFeedback from '../OfflineWithFeedback';
import CONST from '../../CONST';
-function BaseListItem({item, isFocused = false, isDisabled = false, showTooltip, canSelectMultiple = false, onSelectRow, onDismissError = () => {}}) {
+function BaseListItem({
+ item,
+ isFocused = false,
+ isDisabled = false,
+ showTooltip,
+ shouldPreventDefaultFocusOnSelectRow = false,
+ canSelectMultiple = false,
+ onSelectRow,
+ onDismissError = () => {},
+}) {
const isUserItem = lodashGet(item, 'icons.length', 0) > 0;
const ListItem = isUserItem ? UserListItem : RadioListItem;
@@ -32,6 +41,7 @@ function BaseListItem({item, isFocused = false, isDisabled = false, showTooltip,
hoverDimmingValue={1}
hoverStyle={styles.hoveredComponentBG}
dataSet={{[CONST.SELECTION_SCRAPER_HIDDEN_ELEMENT]: true}}
+ onMouseDown={shouldPreventDefaultFocusOnSelectRow ? (e) => e.preventDefault() : undefined}
>
{
onSelectAll();
- if (shouldShowTextInput && shouldFocusOnSelectRow && textInputRef.current) {
+ if (shouldShowTextInput && shouldPreventDefaultFocusOnSelectRow && textInputRef.current) {
textInputRef.current.focus();
}
};
@@ -299,6 +299,7 @@ function BaseSelectionList({
canSelectMultiple={canSelectMultiple}
onSelectRow={() => selectRow(item, true)}
onDismissError={onDismissError}
+ shouldPreventDefaultFocusOnSelectRow={shouldPreventDefaultFocusOnSelectRow}
/>
);
};
@@ -401,6 +402,7 @@ function BaseSelectionList({
accessibilityState={{checked: flattenedSections.allSelected}}
disabled={flattenedSections.allOptions.length === flattenedSections.disabledOptionsIndexes.length}
dataSet={{[CONST.SELECTION_SCRAPER_HIDDEN_ELEMENT]: true}}
+ onMouseDown={shouldPreventDefaultFocusOnSelectRow ? (e) => e.preventDefault() : undefined}
>
{
- if (Browser.isSafari() && _.isArray(props.inputStyle)) {
+ if ((Browser.isSafari() || Browser.isMobileChrome()) && _.isArray(props.inputStyle)) {
const lineHeightValue = _.find(props.inputStyle, (f) => f.lineHeight !== undefined);
if (lineHeightValue) {
return lineHeightValue.lineHeight;
}
- } else if (Browser.isSafari() || Browser.isMobileChrome()) {
- return height;
}
+
return undefined;
- }, [props.inputStyle, height]);
+ }, [props.inputStyle]);
return (
<>
@@ -346,6 +346,10 @@ function BaseTextInput(props) {
// once it exceeds the input space (See https://github.com/Expensify/App/issues/13802)
!isMultiline && {height, lineHeight},
+ // Explicitly change boxSizing attribute for mobile chrome in order to apply line-height
+ // for the issue mentioned here https://github.com/Expensify/App/issues/26735
+ !isMultiline && Browser.isMobileChrome() && {boxSizing: 'content-box', height: undefined},
+
// Stop scrollbar flashing when breaking lines with autoGrowHeight enabled.
props.autoGrowHeight && StyleUtils.getAutoGrowHeightInputStyle(textInputHeight, maxHeight),
// Add disabled color theme when field is not editable.
diff --git a/src/hooks/usePrevious.js b/src/hooks/usePrevious.ts
similarity index 63%
rename from src/hooks/usePrevious.js
rename to src/hooks/usePrevious.ts
index b1f8ff82ea2d..279e8e4a3bf4 100644
--- a/src/hooks/usePrevious.js
+++ b/src/hooks/usePrevious.ts
@@ -2,12 +2,9 @@ import {useEffect, useRef} from 'react';
/**
* A hook that returns the previous value of a variable
- *
- * @param {*} value
- * @returns {*}
*/
-export default function usePrevious(value) {
- const ref = useRef(value);
+export default function usePrevious(value: T): T {
+ const ref = useRef(value);
useEffect(() => {
ref.current = value;
}, [value]);
diff --git a/src/languages/en.ts b/src/languages/en.ts
index a35e4d529f93..bf75290b5872 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -193,6 +193,7 @@ export default {
phoneNumber: `Please enter a valid phone number, with the country code (e.g. ${CONST.EXAMPLE_PHONE_NUMBER})`,
fieldRequired: 'This field is required.',
characterLimit: ({limit}: CharacterLimitParams) => `Exceeds the maximum length of ${limit} characters`,
+ characterLimitExceedCounter: ({length, limit}) => `Character limit exceeded (${length}/${limit})`,
dateInvalid: 'Please select a valid date',
invalidCharacter: 'Invalid character',
enterMerchant: 'Enter a merchant name',
@@ -441,7 +442,7 @@ export default {
chatWithAccountManager: 'Chat with your account manager here',
sayHello: 'Say hello!',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `Welcome to ${roomName}!`,
- usePlusButton: '\n\nYou can also use the + button below to request money or assign a task!',
+ usePlusButton: '\n\nYou can also use the + button to send money, request money, or assign a task!',
},
reportAction: {
asCopilot: 'as copilot for',
@@ -834,6 +835,7 @@ export default {
availableSpend: 'Remaining spending power',
virtualCardNumber: 'Virtual card number',
physicalCardNumber: 'Physical card number',
+ reportFraud: 'Report virtual card fraud',
cardDetails: {
cardNumber: 'Virtual card number',
expiration: 'Expiration',
@@ -843,6 +845,20 @@ export default {
copyCardNumber: 'Copy card number',
},
},
+ reportFraudPage: {
+ title: 'Report virtual card fraud',
+ description: 'If your virtual card details have been stolen or compromised, we’ll permanently deactivate your existing card and provide you with a new virtual card and number.',
+ deactivateCard: 'Deactivate card',
+ reportVirtualCardFraud: 'Report virtual card fraud',
+ },
+ activateCardPage: {
+ activateCard: 'Activate card',
+ pleaseEnterLastFour: 'Please enter the last four digits of your card.',
+ activatePhysicalCard: 'Activate physical card',
+ error: {
+ thatDidntMatch: "That didn't match the last 4 digits on your card. Please try again.",
+ },
+ },
transferAmountPage: {
transfer: ({amount}: TransferParams) => `Transfer${amount ? ` ${amount}` : ''}`,
instant: 'Instant (Debit card)',
@@ -996,7 +1012,7 @@ export default {
error: {
dateShouldBeBefore: ({dateString}: DateShouldBeBeforeParams) => `Date should be before ${dateString}.`,
dateShouldBeAfter: ({dateString}: DateShouldBeAfterParams) => `Date should be after ${dateString}.`,
- hasInvalidCharacter: 'Name can only include letters.',
+ hasInvalidCharacter: 'Name can only include Latin characters.',
incorrectZipFormat: ({zipFormat}: IncorrectZipFormatParams) => `Incorrect zip code format.${zipFormat ? ` Acceptable format: ${zipFormat}` : ''}`,
},
},
@@ -1355,6 +1371,7 @@ export default {
notAuthorized: `You do not have access to this page. Are you trying to join the workspace? Please reach out to the owner of this workspace so they can add you as a member! Something else? Reach out to ${CONST.EMAIL.CONCIERGE}`,
goToRoom: ({roomName}: GoToRoomParams) => `Go to ${roomName} room`,
workspaceAvatar: 'Workspace avatar',
+ mustBeOnlineToViewMembers: 'You must be online in order to view members of this workspace.',
},
emptyWorkspace: {
title: 'Create a new workspace',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index b4c15ce0953b..d5992f6f363d 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -183,6 +183,7 @@ export default {
phoneNumber: `Introduce un teléfono válido, incluyendo el código del país (p. ej. ${CONST.EXAMPLE_PHONE_NUMBER})`,
fieldRequired: 'Este campo es obligatorio.',
characterLimit: ({limit}: CharacterLimitParams) => `Supera el límite de ${limit} caracteres`,
+ characterLimitExceedCounter: ({length, limit}) => `Se superó el límite de caracteres (${length}/${limit})`,
dateInvalid: 'Por favor, selecciona una fecha válida',
invalidCharacter: 'Carácter invalido',
enterMerchant: 'Introduce un comerciante',
@@ -433,7 +434,7 @@ export default {
chatWithAccountManager: 'Chatea con tu gestor de cuenta aquí',
sayHello: '¡Saluda!',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `¡Bienvenido a ${roomName}!`,
- usePlusButton: '\n\n¡También puedes usar el botón + de abajo para pedir dinero o asignar una tarea!',
+ usePlusButton: '\n\n¡También puedes usar el botón + de abajo para enviar dinero, pedir dinero, o asignar una tarea!',
},
reportAction: {
asCopilot: 'como copiloto de',
@@ -830,6 +831,7 @@ export default {
availableSpend: 'Capacidad de gasto restante',
virtualCardNumber: 'Número de la tarjeta virtual',
physicalCardNumber: 'Número de la tarjeta física',
+ reportFraud: 'Reportar fraude con la tarjeta virtual',
cardDetails: {
cardNumber: 'Número de tarjeta virtual',
expiration: 'Expiración',
@@ -839,6 +841,21 @@ export default {
copyCardNumber: 'Copiar número de la tarjeta',
},
},
+ reportFraudPage: {
+ title: 'Reportar fraude con la tarjeta virtual',
+ description:
+ 'Si los datos de tu tarjeta virtual han sido robados o se han visto comprometidos, desactivaremos permanentemente la tarjeta actual y le proporcionaremos una tarjeta virtual y un número nuevo.',
+ deactivateCard: 'Desactivar tarjeta',
+ reportVirtualCardFraud: 'Reportar fraude con la tarjeta virtual',
+ },
+ activateCardPage: {
+ activateCard: 'Activar tarjeta',
+ pleaseEnterLastFour: 'Introduce los cuatro últimos dígitos de la tarjeta.',
+ activatePhysicalCard: 'Activar tarjeta física',
+ error: {
+ thatDidntMatch: 'Los 4 últimos dígitos de tu tarjeta no coinciden. Por favor, inténtalo de nuevo.',
+ },
+ },
transferAmountPage: {
transfer: ({amount}: TransferParams) => `Transferir${amount ? ` ${amount}` : ''}`,
instant: 'Instante',
@@ -994,7 +1011,7 @@ export default {
dateShouldBeBefore: ({dateString}: DateShouldBeBeforeParams) => `La fecha debe ser anterior a ${dateString}.`,
dateShouldBeAfter: ({dateString}: DateShouldBeAfterParams) => `La fecha debe ser posterior a ${dateString}.`,
incorrectZipFormat: ({zipFormat}: IncorrectZipFormatParams) => `Formato de código postal incorrecto.${zipFormat ? ` Formato aceptable: ${zipFormat}` : ''}`,
- hasInvalidCharacter: 'El nombre sólo puede incluir letras.',
+ hasInvalidCharacter: 'El nombre sólo puede incluir caracteres latinos.',
},
},
resendValidationForm: {
@@ -1375,6 +1392,7 @@ export default {
notAuthorized: `No tienes acceso a esta página. ¿Estás tratando de unirte al espacio de trabajo? Comunícate con el propietario de este espacio de trabajo para que pueda añadirte como miembro. ¿Necesitas algo más? Comunícate con ${CONST.EMAIL.CONCIERGE}`,
goToRoom: ({roomName}: GoToRoomParams) => `Ir a la sala ${roomName}`,
workspaceAvatar: 'Espacio de trabajo avatar',
+ mustBeOnlineToViewMembers: 'Debes estar en línea para poder ver los miembros de este espacio de trabajo.',
},
emptyWorkspace: {
title: 'Crear un nuevo espacio de trabajo',
diff --git a/src/libs/Clipboard/index.js b/src/libs/Clipboard/index.js
index b770b2f2c787..6fbaa8eccd31 100644
--- a/src/libs/Clipboard/index.js
+++ b/src/libs/Clipboard/index.js
@@ -1,5 +1,4 @@
-// on Web/desktop this import will be replaced with `react-native-web`
-import {Clipboard} from 'react-native-web';
+import Clipboard from '@react-native-clipboard/clipboard';
import lodashGet from 'lodash/get';
import CONST from '../../CONST';
import * as Browser from '../Browser';
diff --git a/src/libs/Clipboard/index.native.js b/src/libs/Clipboard/index.native.js
index d6345ac94a36..fe79e38585c4 100644
--- a/src/libs/Clipboard/index.native.js
+++ b/src/libs/Clipboard/index.native.js
@@ -1,7 +1,7 @@
-import Clipboard from '@react-native-community/clipboard';
+import Clipboard from '@react-native-clipboard/clipboard';
/**
- * Sets a string on the Clipboard object via @react-native-community/clipboard
+ * Sets a string on the Clipboard object via @react-native-clipboard/clipboard
*
* @param {String} text
*/
diff --git a/src/libs/EmojiUtils.js b/src/libs/EmojiUtils.js
index 136eee5a4116..af498831f4a4 100644
--- a/src/libs/EmojiUtils.js
+++ b/src/libs/EmojiUtils.js
@@ -278,17 +278,10 @@ function extractEmojis(text) {
}
const emojis = [];
-
- // Text can contain similar emojis as well as their skin tone variants. Create a Set to remove duplicate emojis from the search.
- const foundEmojiCodes = new Set();
-
for (let i = 0; i < parsedEmojis.length; i++) {
const character = parsedEmojis[i];
const emoji = Emojis.emojiCodeTableWithSkinTones[character];
-
- // Add the parsed emoji to the final emojis if not already present.
- if (emoji && !foundEmojiCodes.has(emoji.code)) {
- foundEmojiCodes.add(emoji.code);
+ if (emoji) {
emojis.push(emoji);
}
}
@@ -296,6 +289,24 @@ function extractEmojis(text) {
return emojis;
}
+/**
+ * Take the current emojis and the former emojis and return the emojis that were added, if we add an already existing emoji, we also return it
+ * @param {Object[]} currentEmojis The array of current emojis
+ * @param {Object[]} formerEmojis The array of former emojis
+ * @returns {Object[]} The array of added emojis
+ */
+function getAddedEmojis(currentEmojis, formerEmojis) {
+ const newEmojis = [...currentEmojis];
+ // We are removing the emojis from the newEmojis array if they were already present before.
+ formerEmojis.forEach((formerEmoji) => {
+ const indexOfAlreadyPresentEmoji = _.findIndex(newEmojis, (newEmoji) => newEmoji.code === formerEmoji.code);
+ if (indexOfAlreadyPresentEmoji >= 0) {
+ newEmojis.splice(indexOfAlreadyPresentEmoji, 1);
+ }
+ });
+ return newEmojis;
+}
+
/**
* Replace any emoji name in a text with the emoji icon.
* If we're on mobile, we also add a space after the emoji granted there's no text after it.
@@ -484,4 +495,6 @@ export {
getPreferredEmojiCode,
getUniqueEmojiCodes,
replaceAndExtractEmojis,
+ extractEmojis,
+ getAddedEmojis,
};
diff --git a/src/libs/IOUUtils.ts b/src/libs/IOUUtils.ts
index 6f6024506985..2425211d16bc 100644
--- a/src/libs/IOUUtils.ts
+++ b/src/libs/IOUUtils.ts
@@ -77,7 +77,7 @@ function isIOUReportPendingCurrencyConversion(iouReport: Report): boolean {
* Checks if the iou type is one of request, send, or split.
*/
function isValidMoneyRequestType(iouType: string): boolean {
- const moneyRequestType: string[] = [CONST.IOU.MONEY_REQUEST_TYPE.REQUEST, CONST.IOU.MONEY_REQUEST_TYPE.SPLIT];
+ const moneyRequestType: string[] = [CONST.IOU.MONEY_REQUEST_TYPE.REQUEST, CONST.IOU.MONEY_REQUEST_TYPE.SPLIT, CONST.IOU.MONEY_REQUEST_TYPE.SEND];
return moneyRequestType.includes(iouType);
}
diff --git a/src/libs/Middleware/HandleUnusedOptimisticID.ts b/src/libs/Middleware/HandleUnusedOptimisticID.ts
index a96eb4d5651b..14f7d08d1fdb 100644
--- a/src/libs/Middleware/HandleUnusedOptimisticID.ts
+++ b/src/libs/Middleware/HandleUnusedOptimisticID.ts
@@ -10,11 +10,7 @@ const handleUnusedOptimisticID: Middleware = (requestResponse, request, isFromSe
const responseOnyxData = response?.onyxData ?? [];
responseOnyxData.forEach((onyxData) => {
const key = onyxData.key;
- if (!key) {
- return;
- }
-
- if (!key.startsWith(ONYXKEYS.COLLECTION.REPORT)) {
+ if (!key?.startsWith(ONYXKEYS.COLLECTION.REPORT)) {
return;
}
diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js
index c866a797877e..d8c47d4c01dd 100644
--- a/src/libs/Middleware/SaveResponseInOnyx.js
+++ b/src/libs/Middleware/SaveResponseInOnyx.js
@@ -14,50 +14,46 @@ const requestsToIgnoreLastUpdateID = ['OpenApp', 'ReconnectApp', 'GetMissingOnyx
* @returns {Promise}
*/
function SaveResponseInOnyx(requestResponse, request) {
- return requestResponse
- .then((response = {}) => {
- const onyxUpdates = response.onyxData;
-
- // Sometimes we call requests that are successfull but they don't have any response or any success/failure data to set. Let's return early since
- // we don't need to store anything here.
- if (!onyxUpdates && !request.successData && !request.failureData) {
- return Promise.resolve(response);
+ return requestResponse.then((response = {}) => {
+ const onyxUpdates = response.onyxData;
+
+ // Sometimes we call requests that are successfull but they don't have any response or any success/failure data to set. Let's return early since
+ // we don't need to store anything here.
+ if (!onyxUpdates && !request.successData && !request.failureData) {
+ return Promise.resolve(response);
+ }
+
+ // If there is an OnyxUpdate for using memory only keys, enable them
+ _.find(onyxUpdates, ({key, value}) => {
+ if (key !== ONYXKEYS.IS_USING_MEMORY_ONLY_KEYS || !value) {
+ return false;
}
- // If there is an OnyxUpdate for using memory only keys, enable them
- _.find(onyxUpdates, ({key, value}) => {
- if (key !== ONYXKEYS.IS_USING_MEMORY_ONLY_KEYS || !value) {
- return false;
- }
-
- MemoryOnlyKeys.enable();
- return true;
- });
-
- const responseToApply = {
- type: CONST.ONYX_UPDATE_TYPES.HTTPS,
- lastUpdateID: Number(response.lastUpdateID || 0),
- previousUpdateID: Number(response.previousUpdateID || 0),
- request,
- response,
- };
-
- if (_.includes(requestsToIgnoreLastUpdateID, request.command) || !OnyxUpdates.doesClientNeedToBeUpdated(Number(response.previousUpdateID || 0))) {
- return OnyxUpdates.apply(responseToApply);
- }
+ MemoryOnlyKeys.enable();
+ return true;
+ });
- // Save the update IDs to Onyx so they can be used to fetch incremental updates if the client gets out of sync from the server
- OnyxUpdates.saveUpdateInformation(responseToApply);
-
- // Ensure the queue is paused while the client resolves the gap in onyx updates so that updates are guaranteed to happen in a specific order.
- return Promise.resolve({
- ...response,
- shouldPauseQueue: true,
- });
- })
- .catch((err) => {
- console.error('Got exception while saving response in Onyx', err);
+ const responseToApply = {
+ type: CONST.ONYX_UPDATE_TYPES.HTTPS,
+ lastUpdateID: Number(response.lastUpdateID || 0),
+ previousUpdateID: Number(response.previousUpdateID || 0),
+ request,
+ response,
+ };
+
+ if (_.includes(requestsToIgnoreLastUpdateID, request.command) || !OnyxUpdates.doesClientNeedToBeUpdated(Number(response.previousUpdateID || 0))) {
+ return OnyxUpdates.apply(responseToApply);
+ }
+
+ // Save the update IDs to Onyx so they can be used to fetch incremental updates if the client gets out of sync from the server
+ OnyxUpdates.saveUpdateInformation(responseToApply);
+
+ // Ensure the queue is paused while the client resolves the gap in onyx updates so that updates are guaranteed to happen in a specific order.
+ return Promise.resolve({
+ ...response,
+ shouldPauseQueue: true,
});
+ });
}
export default SaveResponseInOnyx;
diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators.js b/src/libs/Navigation/AppNavigator/ModalStackNavigators.js
index 6636702592c0..f0df54d78af6 100644
--- a/src/libs/Navigation/AppNavigator/ModalStackNavigators.js
+++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators.js
@@ -142,6 +142,8 @@ const SettingsModalStackNavigator = createModalStackNavigator({
Settings_Lounge_Access: () => require('../../../pages/settings/Profile/LoungeAccessPage').default,
Settings_Wallet: () => require('../../../pages/settings/Wallet/WalletPage').default,
Settings_Wallet_DomainCards: () => require('../../../pages/settings/Wallet/ExpensifyCardPage').default,
+ Settings_Wallet_ReportVirtualCardFraud: () => require('../../../pages/settings/Wallet/ReportVirtualCardFraudPage').default,
+ Settings_Wallet_Card_Activate: () => require('../../../pages/settings/Wallet/ActivatePhysicalCardPage').default,
Settings_Wallet_Transfer_Balance: () => require('../../../pages/settings/Wallet/TransferBalancePage').default,
Settings_Wallet_Choose_Transfer_Account: () => require('../../../pages/settings/Wallet/ChooseTransferAccountPage').default,
Settings_Wallet_EnablePayments: () => require('../../../pages/EnablePayments/EnablePaymentsPage').default,
@@ -151,6 +153,7 @@ const SettingsModalStackNavigator = createModalStackNavigator({
Settings_Status_Set: () => require('../../../pages/settings/Profile/CustomStatus/StatusSetPage').default,
Workspace_Initial: () => require('../../../pages/workspace/WorkspaceInitialPage').default,
Workspace_Settings: () => require('../../../pages/workspace/WorkspaceSettingsPage').default,
+ Workspace_Settings_Currency: () => require('../../../pages/workspace/WorkspaceSettingsCurrencyPage').default,
Workspace_Card: () => require('../../../pages/workspace/card/WorkspaceCardPage').default,
Workspace_Reimburse: () => require('../../../pages/workspace/reimburse/WorkspaceReimbursePage').default,
Workspace_RateAndUnit: () => require('../../../pages/workspace/reimburse/WorkspaceRateAndUnitPage').default,
diff --git a/src/libs/Navigation/linkingConfig.js b/src/libs/Navigation/linkingConfig.js
index bf069aba314e..7153095683f0 100644
--- a/src/libs/Navigation/linkingConfig.js
+++ b/src/libs/Navigation/linkingConfig.js
@@ -73,6 +73,10 @@ export default {
path: ROUTES.SETTINGS_WALLET_DOMAINCARDS.route,
exact: true,
},
+ Settings_Wallet_ReportVirtualCardFraud: {
+ path: ROUTES.SETTINGS_REPORT_FRAUD.route,
+ exact: true,
+ },
Settings_Wallet_EnablePayments: {
path: ROUTES.SETTINGS_ENABLE_PAYMENTS,
exact: true,
@@ -85,6 +89,10 @@ export default {
path: ROUTES.SETTINGS_WALLET_CHOOSE_TRANSFER_ACCOUNT,
exact: true,
},
+ Settings_Wallet_Card_Activate: {
+ path: ROUTES.SETTINGS_WALLET_CARD_ACTIVATE.route,
+ exact: true,
+ },
Settings_Add_Debit_Card: {
path: ROUTES.SETTINGS_ADD_DEBIT_CARD,
exact: true,
@@ -177,6 +185,9 @@ export default {
Workspace_Settings: {
path: ROUTES.WORKSPACE_SETTINGS.route,
},
+ Workspace_Settings_Currency: {
+ path: ROUTES.WORKSPACE_SETTINGS_CURRENCY.route,
+ },
Workspace_Card: {
path: ROUTES.WORKSPACE_CARD.route,
},
diff --git a/src/libs/Notification/LocalNotification/BrowserNotifications.js b/src/libs/Notification/LocalNotification/BrowserNotifications.js
index 520f0de17bea..3199e4c6388d 100644
--- a/src/libs/Notification/LocalNotification/BrowserNotifications.js
+++ b/src/libs/Notification/LocalNotification/BrowserNotifications.js
@@ -111,7 +111,7 @@ export default {
const plainTextMessage = (_.find(message, (f) => f.type === 'COMMENT') || {}).text;
if (isChatRoom) {
- const roomName = _.get(report, 'reportName', '');
+ const roomName = ReportUtils.getReportName(report);
title = roomName;
body = `${plainTextPerson}: ${plainTextMessage}`;
} else {
diff --git a/src/libs/NumberUtils.ts b/src/libs/NumberUtils.ts
index 477ac8464d57..6e8d0fa4362b 100644
--- a/src/libs/NumberUtils.ts
+++ b/src/libs/NumberUtils.ts
@@ -71,4 +71,14 @@ function generateRandomInt(a: number, b: number): number {
return Math.floor(lower + Math.random() * (upper - lower + 1));
}
-export {rand64, generateHexadecimalValue, generateRandomInt, clampWorklet};
+/**
+ * Parses a numeric string value containing a decimal separator from any locale.
+ *
+ * @param value the string value to parse
+ * @returns a floating point number parsed from the string value
+ */
+function parseFloatAnyLocale(value: string): number {
+ return parseFloat(value ? value.replace(',', '.') : value);
+}
+
+export {rand64, generateHexadecimalValue, generateRandomInt, clampWorklet, parseFloatAnyLocale};
diff --git a/src/libs/Permissions.ts b/src/libs/Permissions.ts
index 05322472a407..13489c396c3c 100644
--- a/src/libs/Permissions.ts
+++ b/src/libs/Permissions.ts
@@ -17,13 +17,6 @@ function canUseDefaultRooms(betas: Beta[]): boolean {
return betas?.includes(CONST.BETAS.DEFAULT_ROOMS) || canUseAllBetas(betas);
}
-/**
- * IOU Send feature is temporarily disabled.
- */
-function canUseIOUSend(): boolean {
- return false;
-}
-
function canUseWallet(betas: Beta[]): boolean {
return betas?.includes(CONST.BETAS.BETA_EXPENSIFY_WALLET) || canUseAllBetas(betas);
}
@@ -68,7 +61,6 @@ export default {
canUseChronos,
canUsePayWithExpensify,
canUseDefaultRooms,
- canUseIOUSend,
canUseWallet,
canUseCommentLinking,
canUsePolicyRooms,
diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js
index 591656b5c06a..d688bc544fec 100644
--- a/src/libs/ReportUtils.js
+++ b/src/libs/ReportUtils.js
@@ -1900,15 +1900,11 @@ function getParentNavigationSubtitle(report) {
function navigateToDetailsPage(report) {
const participantAccountIDs = lodashGet(report, 'participantAccountIDs', []);
- if (isChatRoom(report) || isPolicyExpenseChat(report) || isChatThread(report) || isTaskReport(report) || isMoneyRequestReport(report)) {
- Navigation.navigate(ROUTES.REPORT_WITH_ID_DETAILS.getRoute(report.reportID));
- return;
- }
- if (participantAccountIDs.length === 1) {
+ if (isDM(report) && participantAccountIDs.length === 1) {
Navigation.navigate(ROUTES.PROFILE.getRoute(participantAccountIDs[0]));
return;
}
- Navigation.navigate(ROUTES.REPORT_PARTICIPANTS.getRoute(report.reportID));
+ Navigation.navigate(ROUTES.REPORT_WITH_ID_DETAILS.getRoute(report.reportID));
}
/**
@@ -2414,6 +2410,7 @@ function buildOptimisticReportPreview(chatReport, iouReport, comment = '', trans
const hasReceipt = TransactionUtils.hasReceipt(transaction);
const isReceiptBeingScanned = hasReceipt && TransactionUtils.isReceiptBeingScanned(transaction);
const message = getReportPreviewMessage(iouReport);
+ const created = DateUtils.getDBTime();
return {
reportActionID: NumberUtils.rand64(),
reportID: chatReport.reportID,
@@ -2430,13 +2427,13 @@ function buildOptimisticReportPreview(chatReport, iouReport, comment = '', trans
type: CONST.REPORT.MESSAGE.TYPE.COMMENT,
},
],
- created: DateUtils.getDBTime(),
+ created,
accountID: iouReport.managerID || 0,
// The preview is initially whispered if created with a receipt, so the actor is the current user as well
actorAccountID: hasReceipt ? currentUserAccountID : iouReport.managerID || 0,
childMoneyRequestCount: 1,
childLastMoneyRequestComment: comment,
- childLastReceiptTransactionIDs: hasReceipt ? transaction.transactionID : '',
+ childRecentReceiptTransactionIDs: hasReceipt ? {[transaction.transactionID]: created} : [],
whisperedToAccountIDs: isReceiptBeingScanned ? [currentUserAccountID] : [],
};
}
@@ -2495,8 +2492,9 @@ function buildOptimisticModifiedExpenseReportAction(transactionThread, oldTransa
*/
function updateReportPreview(iouReport, reportPreviewAction, isPayRequest = false, comment = '', transaction = undefined) {
const hasReceipt = TransactionUtils.hasReceipt(transaction);
- const lastReceiptTransactionIDs = lodashGet(reportPreviewAction, 'childLastReceiptTransactionIDs', '');
- const previousTransactionIDs = lastReceiptTransactionIDs.split(',').slice(0, 2);
+ const recentReceiptTransactions = lodashGet(reportPreviewAction, 'childRecentReceiptTransactionIDs', {});
+ const transactionsToKeep = TransactionUtils.getRecentTransactions(recentReceiptTransactions);
+ const previousTransactions = _.mapObject(recentReceiptTransactions, (value, key) => (_.contains(transactionsToKeep, key) ? value : null));
const message = getReportPreviewMessage(iouReport, reportPreviewAction);
return {
@@ -2512,7 +2510,12 @@ function updateReportPreview(iouReport, reportPreviewAction, isPayRequest = fals
],
childLastMoneyRequestComment: comment || reportPreviewAction.childLastMoneyRequestComment,
childMoneyRequestCount: reportPreviewAction.childMoneyRequestCount + (isPayRequest ? 0 : 1),
- childLastReceiptTransactionIDs: hasReceipt ? [transaction.transactionID, ...previousTransactionIDs].join(',') : lastReceiptTransactionIDs,
+ childRecentReceiptTransactionIDs: hasReceipt
+ ? {
+ [transaction.transactionID]: transaction.created,
+ ...previousTransactions,
+ }
+ : recentReceiptTransactions,
// As soon as we add a transaction without a receipt to the report, it will have ready money requests,
// so we remove the whisper
whisperedToAccountIDs: hasReceipt ? reportPreviewAction.whisperedToAccountIDs : [],
@@ -3367,10 +3370,9 @@ function canRequestMoney(report, participants) {
*
* @param {Object} report
* @param {Array} reportParticipants
- * @param {Array} betas
* @returns {Array}
*/
-function getMoneyRequestOptions(report, reportParticipants, betas) {
+function getMoneyRequestOptions(report, reportParticipants) {
// In any thread or task report, we do not allow any new money requests yet
if (isChatThread(report) || isTaskReport(report)) {
return [];
@@ -3402,7 +3404,7 @@ function getMoneyRequestOptions(report, reportParticipants, betas) {
...(canRequestMoney(report, participants) ? [CONST.IOU.MONEY_REQUEST_TYPE.REQUEST] : []),
// Send money option should be visible only in DMs
- ...(Permissions.canUseIOUSend(betas) && isChatReport(report) && !isPolicyExpenseChat(report) && hasSingleParticipantInReport ? [CONST.IOU.MONEY_REQUEST_TYPE.SEND] : []),
+ ...(isChatReport(report) && !isPolicyExpenseChat(report) && hasSingleParticipantInReport ? [CONST.IOU.MONEY_REQUEST_TYPE.SEND] : []),
];
}
@@ -3589,14 +3591,6 @@ function getWorkspaceChats(policyID, accountIDs) {
return _.filter(allReports, (report) => isPolicyExpenseChat(report) && lodashGet(report, 'policyID', '') === policyID && _.contains(accountIDs, lodashGet(report, 'ownerAccountID', '')));
}
-/*
- * @param {Object|null} report
- * @returns {Boolean}
- */
-function shouldDisableSettings(report) {
- return !isMoneyRequestReport(report) && !isPolicyExpenseChat(report) && !isChatRoom(report) && !isChatThread(report);
-}
-
/**
* @param {Object|null} report
* @param {Object|null} policy - the workspace the report is on, null if the user isn't a member of the workspace
@@ -3765,13 +3759,15 @@ function getParticipantsIDs(report) {
* @returns {Object}
*/
function getReportPreviewDisplayTransactions(reportPreviewAction) {
- const transactionIDs = lodashGet(reportPreviewAction, ['childLastReceiptTransactionIDs'], '').split(',');
+ const transactionIDs = lodashGet(reportPreviewAction, ['childRecentReceiptTransactionIDs']);
return _.reduce(
- transactionIDs,
+ _.keys(transactionIDs),
(transactions, transactionID) => {
- const transaction = TransactionUtils.getTransaction(transactionID);
- if (TransactionUtils.hasReceipt(transaction)) {
- transactions.push(transaction);
+ if (transactionIDs[transactionID] !== null) {
+ const transaction = TransactionUtils.getTransaction(transactionID);
+ if (TransactionUtils.hasReceipt(transaction)) {
+ transactions.push(transaction);
+ }
}
return transactions;
},
@@ -3824,7 +3820,7 @@ function getIOUReportActionDisplayMessage(reportAction) {
* @returns {Boolean}
*/
function isReportDraft(report) {
- return lodashGet(report, 'stateNum') === CONST.REPORT.STATE_NUM.OPEN && lodashGet(report, 'statusNum') === CONST.REPORT.STATUS.OPEN;
+ return isExpenseReport(report) && lodashGet(report, 'stateNum') === CONST.REPORT.STATE_NUM.OPEN && lodashGet(report, 'statusNum') === CONST.REPORT.STATUS.OPEN;
}
export {
@@ -3955,7 +3951,6 @@ export {
getPolicy,
getPolicyExpenseChatReportIDByOwner,
getWorkspaceChats,
- shouldDisableSettings,
shouldDisableRename,
hasSingleParticipant,
getReportRecipientAccountIDs,
diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts
index beb1f9c323d6..b5b8271c35a3 100644
--- a/src/libs/TransactionUtils.ts
+++ b/src/libs/TransactionUtils.ts
@@ -374,6 +374,15 @@ function getValidWaypoints(waypoints: WaypointCollection, reArrangeIndexes = fal
}, {});
}
+/**
+ * Returns the most recent transactions in an object
+ */
+function getRecentTransactions(transactions: Record, size = 2): string[] {
+ return Object.keys(transactions)
+ .sort((transactionID1, transactionID2) => (new Date(transactions[transactionID1]) < new Date(transactions[transactionID2]) ? 1 : -1))
+ .slice(0, size);
+}
+
export {
buildOptimisticTransaction,
getUpdatedTransaction,
@@ -399,4 +408,5 @@ export {
hasMissingSmartscanFields,
getWaypointIndex,
waypointHasValidAddress,
+ getRecentTransactions,
};
diff --git a/src/libs/__mocks__/Permissions.ts b/src/libs/__mocks__/Permissions.ts
index 2c062590573e..66ef64bbb994 100644
--- a/src/libs/__mocks__/Permissions.ts
+++ b/src/libs/__mocks__/Permissions.ts
@@ -12,6 +12,5 @@ export default {
...jest.requireActual('../Permissions'),
canUseDefaultRooms: (betas: Beta[]) => betas.includes(CONST.BETAS.DEFAULT_ROOMS),
canUsePolicyRooms: (betas: Beta[]) => betas.includes(CONST.BETAS.POLICY_ROOMS),
- canUseIOUSend: (betas: Beta[]) => betas.includes(CONST.BETAS.IOU_SEND),
canUseCustomStatus: (betas: Beta[]) => betas.includes(CONST.BETAS.CUSTOM_STATUS),
};
diff --git a/src/libs/actions/CanvasSize.js b/src/libs/actions/CanvasSize.js
index ed83562a3e43..0c4cd88fea70 100644
--- a/src/libs/actions/CanvasSize.js
+++ b/src/libs/actions/CanvasSize.js
@@ -1,16 +1,25 @@
import Onyx from 'react-native-onyx';
import canvasSize from 'canvas-size';
import ONYXKEYS from '../../ONYXKEYS';
+import * as Browser from '../Browser';
/**
* Calculate the max area of canvas on this specific platform and save it in onyx
*/
function retrieveMaxCanvasArea() {
- canvasSize.maxArea({
- onSuccess: (width, height) => {
- Onyx.merge(ONYXKEYS.MAX_CANVAS_AREA, width * height);
- },
- });
+ // We're limiting the maximum value on mobile web to prevent a crash related to rendering large canvas elements.
+ // More information at: https://github.com/jhildenbiddle/canvas-size/issues/13
+ canvasSize
+ .maxArea({
+ max: Browser.isMobile() ? 8192 : null,
+ usePromise: true,
+ useWorker: false,
+ })
+ .then(() => ({
+ onSuccess: (width, height) => {
+ Onyx.merge(ONYXKEYS.MAX_CANVAS_AREA, width * height);
+ },
+ }));
}
/**
diff --git a/src/libs/actions/Card.js b/src/libs/actions/Card.js
new file mode 100644
index 000000000000..a060c1bc67fa
--- /dev/null
+++ b/src/libs/actions/Card.js
@@ -0,0 +1,104 @@
+import Onyx from 'react-native-onyx';
+import ONYXKEYS from '../../ONYXKEYS';
+import * as API from '../API';
+
+/**
+ * @param {Number} cardID
+ */
+function reportVirtualExpensifyCardFraud(cardID) {
+ API.write(
+ 'ReportVirtualExpensifyCardFraud',
+ {
+ cardID,
+ },
+ {
+ optimisticData: [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: ONYXKEYS.FORMS.REPORT_VIRTUAL_CARD_FRAUD,
+ value: {
+ isLoading: true,
+ },
+ },
+ ],
+ successData: [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: ONYXKEYS.FORMS.REPORT_VIRTUAL_CARD_FRAUD,
+ value: {
+ isLoading: false,
+ },
+ },
+ ],
+ failureData: [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: ONYXKEYS.FORMS.REPORT_VIRTUAL_CARD_FRAUD,
+ value: {
+ isLoading: false,
+ },
+ },
+ ],
+ },
+ );
+}
+
+/**
+ * Activates the physical Expensify card based on the last four digits of the card number
+ *
+ * @param {Number} lastFourDigits
+ * @param {Number} cardID
+ */
+function activatePhysicalExpensifyCard(lastFourDigits, cardID) {
+ API.write(
+ 'ActivatePhysicalExpensifyCard',
+ {lastFourDigits, cardID},
+ {
+ optimisticData: [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: ONYXKEYS.CARD_LIST,
+ value: {
+ [cardID]: {
+ errors: null,
+ isLoading: true,
+ },
+ },
+ },
+ ],
+ successData: [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: ONYXKEYS.CARD_LIST,
+ value: {
+ [cardID]: {
+ isLoading: false,
+ },
+ },
+ },
+ ],
+ failureData: [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: ONYXKEYS.CARD_LIST,
+ value: {
+ [cardID]: {
+ isLoading: false,
+ },
+ },
+ },
+ ],
+ },
+ );
+}
+
+/**
+ * Clears errors for a specific cardID
+ *
+ * @param {Number} cardID
+ */
+function clearCardListErrors(cardID) {
+ Onyx.merge(ONYXKEYS.CARD_LIST, {[cardID]: {errors: null, isLoading: false}});
+}
+
+export {reportVirtualExpensifyCardFraud, activatePhysicalExpensifyCard, clearCardListErrors};
diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js
index 32a899f8beee..bc6ee9be4e0b 100644
--- a/src/libs/actions/IOU.js
+++ b/src/libs/actions/IOU.js
@@ -24,6 +24,14 @@ import ReceiptGeneric from '../../../assets/images/receipt-generic.png';
import * as LocalePhoneNumber from '../LocalePhoneNumber';
import * as Policy from './Policy';
+let allPersonalDetails;
+Onyx.connect({
+ key: ONYXKEYS.PERSONAL_DETAILS_LIST,
+ callback: (val) => {
+ allPersonalDetails = val || {};
+ },
+});
+
let allReports;
Onyx.connect({
key: ONYXKEYS.COLLECTION.REPORT,
@@ -116,7 +124,7 @@ function resetMoneyRequestInfo(id = '') {
tag: '',
created,
receiptPath: '',
- receiptSource: '',
+ receiptFilename: '',
transactionID: '',
billable: null,
});
@@ -472,7 +480,10 @@ function getMoneyRequestInformation(
billable,
);
- const optimisticPolicyRecentlyUsedCategories = Policy.buildOptimisticPolicyRecentlyUsedCategories(iouReport.policyID, category);
+ let optimisticPolicyRecentlyUsedCategories = [];
+ if (category) {
+ optimisticPolicyRecentlyUsedCategories = Policy.buildOptimisticPolicyRecentlyUsedCategories(iouReport.policyID, category);
+ }
const optimisticPolicyRecentlyUsedTags = {};
const policyTags = allPolicyTags[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${iouReport.policyID}`];
@@ -1259,6 +1270,225 @@ function splitBillAndOpenReport(participants, currentUserLogin, currentUserAccou
Report.notifyNewAction(splitData.chatReportID, currentUserAccountID);
}
+/** Used exclusively for starting a split bill request that contains a receipt, the split request will be completed once the receipt is scanned
+ * or user enters details manually.
+ *
+ * @param {Array} participants
+ * @param {String} currentUserLogin
+ * @param {Number} currentUserAccountID
+ * @param {String} comment
+ * @param {Object} receipt
+ * @param {String} existingSplitChatReportID - Either a group DM or a workspace chat
+ */
+function startSplitBill(participants, currentUserLogin, currentUserAccountID, comment, receipt, existingSplitChatReportID = '') {
+ const currentUserEmailForIOUSplit = OptionsListUtils.addSMSDomainIfPhoneNumber(currentUserLogin);
+ const participantAccountIDs = _.map(participants, (participant) => Number(participant.accountID));
+ const existingSplitChatReport =
+ existingSplitChatReportID || participants[0].reportID
+ ? allReports[`${ONYXKEYS.COLLECTION.REPORT}${existingSplitChatReportID || participants[0].reportID}`]
+ : ReportUtils.getChatByParticipants(participantAccountIDs);
+ const splitChatReport = existingSplitChatReport || ReportUtils.buildOptimisticChatReport(participantAccountIDs);
+ const isOwnPolicyExpenseChat = splitChatReport.isOwnPolicyExpenseChat || false;
+
+ const {name: filename, source, state = CONST.IOU.RECEIPT_STATE.SCANREADY} = receipt;
+ const receiptObject = {state, source};
+
+ // ReportID is -2 (aka "deleted") on the group transaction
+ const splitTransaction = TransactionUtils.buildOptimisticTransaction(0, CONST.CURRENCY.USD, CONST.REPORT.SPLIT_REPORTID, comment, '', '', '', '', receiptObject, filename);
+
+ // Note: The created action must be optimistically generated before the IOU action so there's no chance that the created action appears after the IOU action in the chat
+ const splitChatCreatedReportAction = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
+ const splitIOUReportAction = ReportUtils.buildOptimisticIOUReportAction(
+ CONST.IOU.REPORT_ACTION_TYPE.SPLIT,
+ 0,
+ CONST.CURRENCY.USD,
+ comment,
+ participants,
+ splitTransaction.transactionID,
+ '',
+ '',
+ false,
+ false,
+ receiptObject,
+ isOwnPolicyExpenseChat,
+ );
+
+ splitChatReport.lastReadTime = DateUtils.getDBTime();
+ splitChatReport.lastMessageText = splitIOUReportAction.message[0].text;
+ splitChatReport.lastMessageHtml = splitIOUReportAction.message[0].html;
+
+ // If we have an existing splitChatReport (group chat or workspace) use it's pending fields, otherwise indicate that we are adding a chat
+ if (!existingSplitChatReport) {
+ splitChatReport.pendingFields = {
+ createChat: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
+ };
+ }
+
+ const optimisticData = [
+ {
+ // Use set for new reports because it doesn't exist yet, is faster,
+ // and we need the data to be available when we navigate to the chat page
+ onyxMethod: existingSplitChatReport ? Onyx.METHOD.MERGE : Onyx.METHOD.SET,
+ key: `${ONYXKEYS.COLLECTION.REPORT}${splitChatReport.reportID}`,
+ value: splitChatReport,
+ },
+ {
+ onyxMethod: existingSplitChatReport ? Onyx.METHOD.MERGE : Onyx.METHOD.SET,
+ key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${splitChatReport.reportID}`,
+ value: {
+ ...(existingSplitChatReport ? {} : {[splitChatCreatedReportAction.reportActionID]: splitChatCreatedReportAction}),
+ [splitIOUReportAction.reportActionID]: splitIOUReportAction,
+ },
+ },
+ {
+ onyxMethod: Onyx.METHOD.SET,
+ key: `${ONYXKEYS.COLLECTION.TRANSACTION}${splitTransaction.transactionID}`,
+ value: splitTransaction,
+ },
+ ];
+
+ const successData = [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${splitChatReport.reportID}`,
+ value: {
+ ...(existingSplitChatReport ? {} : {[splitChatCreatedReportAction.reportActionID]: {pendingAction: null}}),
+ [splitIOUReportAction.reportActionID]: {pendingAction: null},
+ },
+ },
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.TRANSACTION}${splitTransaction.transactionID}`,
+ value: {pendingAction: null},
+ },
+ ];
+
+ if (!existingSplitChatReport) {
+ successData.push({
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.REPORT}${splitChatReport.reportID}`,
+ value: {pendingFields: {createChat: null}},
+ });
+ }
+
+ const failureData = [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.TRANSACTION}${splitTransaction.transactionID}`,
+ value: {
+ errors: ErrorUtils.getMicroSecondOnyxError('iou.error.genericCreateFailureMessage'),
+ },
+ },
+ ];
+
+ if (existingSplitChatReport) {
+ failureData.push({
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${splitChatReport.reportID}`,
+ value: {
+ [splitIOUReportAction.reportActionID]: {
+ errors: ErrorUtils.getMicroSecondOnyxError('iou.error.genericCreateFailureMessage'),
+ },
+ },
+ });
+ } else {
+ failureData.push(
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.REPORT}${splitChatReport.reportID}`,
+ value: {
+ errorFields: {
+ createChat: ErrorUtils.getMicroSecondOnyxError('report.genericCreateReportFailureMessage'),
+ },
+ },
+ },
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${splitChatReport.reportID}`,
+ value: {
+ [splitChatCreatedReportAction.reportActionID]: {
+ errors: ErrorUtils.getMicroSecondOnyxError('report.genericCreateReportFailureMessage'),
+ },
+ [splitIOUReportAction.reportActionID]: {
+ errors: ErrorUtils.getMicroSecondOnyxError('report.genericCreateFailureMessage'),
+ },
+ },
+ },
+ );
+ }
+
+ const splits = [{email: currentUserEmailForIOUSplit, accountID: currentUserAccountID}];
+
+ _.each(participants, (participant) => {
+ const email = participant.isOwnPolicyExpenseChat ? '' : OptionsListUtils.addSMSDomainIfPhoneNumber(participant.login || participant.text).toLowerCase();
+ const accountID = participant.isOwnPolicyExpenseChat ? 0 : Number(participant.accountID);
+ if (email === currentUserEmailForIOUSplit) {
+ return;
+ }
+
+ // When splitting with a workspace chat, we only need to supply the policyID and the workspace reportID as it's needed so we can update the report preview
+ if (participant.isOwnPolicyExpenseChat) {
+ splits.push({
+ policyID: participant.policyID,
+ chatReportID: splitChatReport.reportID,
+ });
+ return;
+ }
+
+ const participantPersonalDetails = allPersonalDetails[participant.accountID];
+ if (!participantPersonalDetails) {
+ optimisticData.push({
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: ONYXKEYS.PERSONAL_DETAILS_LIST,
+ value: {
+ [accountID]: {
+ accountID,
+ avatar: UserUtils.getDefaultAvatarURL(accountID),
+ displayName: LocalePhoneNumber.formatPhoneNumber(participant.displayName || email),
+ login: participant.login || participant.text,
+ isOptimisticPersonalDetail: true,
+ },
+ },
+ });
+ }
+
+ splits.push({
+ email,
+ accountID,
+ });
+ });
+
+ // Save the new splits array into the transaction's comment in case the user calls CompleteSplitBill while offline
+ optimisticData.push({
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.TRANSACTION}${splitTransaction.transactionID}`,
+ value: {
+ comment: {
+ splits,
+ },
+ },
+ });
+
+ API.write(
+ 'StartSplitBill',
+ {
+ chatReportID: splitChatReport.reportID,
+ reportActionID: splitIOUReportAction.reportActionID,
+ transactionID: splitTransaction.transactionID,
+ splits: JSON.stringify(splits),
+ receipt,
+ comment,
+ isFromGroupDM: !existingSplitChatReport,
+ ...(existingSplitChatReport ? {} : {createdReportActionID: splitChatCreatedReportAction.reportActionID}),
+ },
+ {optimisticData, successData, failureData},
+ );
+
+ resetMoneyRequestInfo();
+ Navigation.dismissModal(splitChatReport.reportID);
+ Report.notifyNewAction(splitChatReport.chatReportID, currentUserAccountID);
+}
+
/**
* @param {String} transactionID
* @param {Number} transactionThreadReportID
@@ -1706,7 +1936,7 @@ function getSendMoneyParams(report, amount, currency, comment, paymentMethodType
}
const optimisticIOUReport = ReportUtils.buildOptimisticIOUReport(recipientAccountID, managerID, amount, chatReport.reportID, currency, true);
- const optimisticTransaction = TransactionUtils.buildOptimisticTransaction(amount * 100, currency, optimisticIOUReport.reportID, comment);
+ const optimisticTransaction = TransactionUtils.buildOptimisticTransaction(amount, currency, optimisticIOUReport.reportID, comment);
const optimisticTransactionData = {
onyxMethod: Onyx.METHOD.SET,
key: `${ONYXKEYS.COLLECTION.TRANSACTION}${optimisticTransaction.transactionID}`,
@@ -2351,10 +2581,10 @@ function setMoneyRequestParticipants(participants) {
/**
* @param {String} receiptPath
- * @param {String} receiptSource
+ * @param {String} receiptFilename
*/
-function setMoneyRequestReceipt(receiptPath, receiptSource) {
- Onyx.merge(ONYXKEYS.IOU, {receiptPath, receiptSource, merchant: ''});
+function setMoneyRequestReceipt(receiptPath, receiptFilename) {
+ Onyx.merge(ONYXKEYS.IOU, {receiptPath, receiptFilename, merchant: ''});
}
function createEmptyTransaction() {
@@ -2430,6 +2660,7 @@ export {
deleteMoneyRequest,
splitBill,
splitBillAndOpenReport,
+ startSplitBill,
requestMoney,
sendMoneyElsewhere,
approveMoneyRequest,
diff --git a/src/libs/actions/KeyboardShortcuts.js b/src/libs/actions/KeyboardShortcuts.ts
similarity index 94%
rename from src/libs/actions/KeyboardShortcuts.js
rename to src/libs/actions/KeyboardShortcuts.ts
index d66e362890b2..f401e3dd89aa 100644
--- a/src/libs/actions/KeyboardShortcuts.js
+++ b/src/libs/actions/KeyboardShortcuts.ts
@@ -1,7 +1,7 @@
import Onyx from 'react-native-onyx';
import ONYXKEYS from '../../ONYXKEYS';
-let isShortcutsModalOpen;
+let isShortcutsModalOpen: boolean | null;
Onyx.connect({
key: ONYXKEYS.IS_SHORTCUTS_MODAL_OPEN,
callback: (flag) => (isShortcutsModalOpen = flag),
diff --git a/src/libs/actions/Report.js b/src/libs/actions/Report.js
index ab2ac7fb0ca2..27a02b1fc75f 100644
--- a/src/libs/actions/Report.js
+++ b/src/libs/actions/Report.js
@@ -87,6 +87,19 @@ Onyx.connect({
},
});
+const draftNoteMap = {};
+Onyx.connect({
+ key: ONYXKEYS.COLLECTION.PRIVATE_NOTES_DRAFT,
+ callback: (value, key) => {
+ if (!key) {
+ return;
+ }
+
+ const reportID = key.replace(ONYXKEYS.COLLECTION.PRIVATE_NOTES_DRAFT, '');
+ draftNoteMap[reportID] = value;
+ },
+});
+
const allReports = {};
let conciergeChatReportID;
const typingWatchTimers = {};
@@ -2183,6 +2196,21 @@ function clearPrivateNotesError(reportID, accountID) {
Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, {privateNotes: {[accountID]: {errors: null}}});
}
+function getDraftPrivateNote(reportID) {
+ return draftNoteMap[reportID];
+}
+
+/**
+ * Saves the private notes left by the user as they are typing. By saving this data the user can switch between chats, close
+ * tab, refresh etc without worrying about loosing what they typed out.
+ *
+ * @param {String} reportID
+ * @param {String} note
+ */
+function savePrivateNotesDraft(reportID, note) {
+ Onyx.merge(`${ONYXKEYS.COLLECTION.PRIVATE_NOTES_DRAFT}${reportID}`, note);
+}
+
export {
addComment,
addAttachment,
@@ -2237,4 +2265,6 @@ export {
getReportPrivateNote,
clearPrivateNotesError,
hasErrorInPrivateNotes,
+ savePrivateNotesDraft,
+ getDraftPrivateNote,
};
diff --git a/src/libs/fileDownload/FileUtils.js b/src/libs/fileDownload/FileUtils.js
index e508d096128d..144965b63336 100644
--- a/src/libs/fileDownload/FileUtils.js
+++ b/src/libs/fileDownload/FileUtils.js
@@ -170,4 +170,54 @@ const readFileAsync = (path, fileName) =>
});
});
-export {showGeneralErrorAlert, showSuccessAlert, showPermissionErrorAlert, splitExtensionFromFileName, getAttachmentName, getFileType, cleanFileName, appendTimeToFileName, readFileAsync};
+/**
+ * Converts a base64 encoded image string to a File instance.
+ * Adds a `uri` property to the File instance for accessing the blob as a URI.
+ *
+ * @param {string} base64 - The base64 encoded image string.
+ * @param {string} filename - Desired filename for the File instance.
+ * @returns {File} The File instance created from the base64 string with an additional `uri` property.
+ *
+ * @example
+ * const base64Image = "data:image/png;base64,..."; // your base64 encoded image
+ * const imageFile = base64ToFile(base64Image, "example.png");
+ * console.log(imageFile.uri); // Blob URI
+ */
+function base64ToFile(base64, filename) {
+ // Decode the base64 string
+ const byteString = atob(base64.split(',')[1]);
+
+ // Get the mime type from the base64 string
+ const mimeString = base64.split(',')[0].split(':')[1].split(';')[0];
+
+ // Convert byte string to Uint8Array
+ const arrayBuffer = new ArrayBuffer(byteString.length);
+ const uint8Array = new Uint8Array(arrayBuffer);
+ for (let i = 0; i < byteString.length; i++) {
+ uint8Array[i] = byteString.charCodeAt(i);
+ }
+
+ // Create a blob from the Uint8Array
+ const blob = new Blob([uint8Array], {type: mimeString});
+
+ // Create a File instance from the Blob
+ const file = new File([blob], filename, {type: mimeString, lastModified: Date.now()});
+
+ // Add a uri property to the File instance for accessing the blob as a URI
+ file.uri = URL.createObjectURL(blob);
+
+ return file;
+}
+
+export {
+ showGeneralErrorAlert,
+ showSuccessAlert,
+ showPermissionErrorAlert,
+ splitExtensionFromFileName,
+ getAttachmentName,
+ getFileType,
+ cleanFileName,
+ appendTimeToFileName,
+ readFileAsync,
+ base64ToFile,
+};
diff --git a/src/libs/migrateOnyx.js b/src/libs/migrateOnyx.js
index d96a37d95457..aaa706e71fb2 100644
--- a/src/libs/migrateOnyx.js
+++ b/src/libs/migrateOnyx.js
@@ -1,6 +1,5 @@
import _ from 'underscore';
import Log from './Log';
-import RenamePriorityModeKey from './migrations/RenamePriorityModeKey';
import PersonalDetailsByAccountID from './migrations/PersonalDetailsByAccountID';
import RenameReceiptFilename from './migrations/RenameReceiptFilename';
@@ -10,7 +9,7 @@ export default function () {
return new Promise((resolve) => {
// Add all migrations to an array so they are executed in order
- const migrationPromises = [RenamePriorityModeKey, PersonalDetailsByAccountID, RenameReceiptFilename];
+ const migrationPromises = [PersonalDetailsByAccountID, RenameReceiptFilename];
// Reduce all promises down to a single promise. All promises run in a linear fashion, waiting for the
// previous promise to finish before moving onto the next one.
diff --git a/src/libs/migrations/RenamePriorityModeKey.js b/src/libs/migrations/RenamePriorityModeKey.js
deleted file mode 100644
index a2be26880b52..000000000000
--- a/src/libs/migrations/RenamePriorityModeKey.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import Onyx from 'react-native-onyx';
-import _ from 'underscore';
-import ONYXKEYS from '../../ONYXKEYS';
-import Log from '../Log';
-
-// This migration changes the name of the Onyx key NVP_PRIORITY_MODE from priorityMode to nvp_priorityMode
-export default function () {
- return new Promise((resolve) => {
- // Connect to the old key in Onyx to get the old value of priorityMode
- // then set the new key nvp_priorityMode to hold the old data
- // finally remove the old key by setting the value to null
- const connectionID = Onyx.connect({
- key: 'priorityMode',
- callback: (oldPriorityMode) => {
- Onyx.disconnect(connectionID);
-
- // Fail early here because there is nothing to migrate
- if (_.isEmpty(oldPriorityMode)) {
- Log.info('[Migrate Onyx] Skipped migration RenamePriorityModeKey');
- return resolve();
- }
-
- Onyx.multiSet({
- priorityMode: null,
- [ONYXKEYS.NVP_PRIORITY_MODE]: oldPriorityMode,
- }).then(() => {
- Log.info('[Migrate Onyx] Ran migration RenamePriorityModeKey');
- resolve();
- });
- },
- });
- });
-}
diff --git a/src/pages/ConciergePage.js b/src/pages/ConciergePage.js
index e8509024b469..cfd452f0c952 100644
--- a/src/pages/ConciergePage.js
+++ b/src/pages/ConciergePage.js
@@ -32,8 +32,10 @@ function ConciergePage(props) {
useFocusEffect(() => {
if (_.has(props.session, 'authToken')) {
// Pop the concierge loading page before opening the concierge report.
- Navigation.goBack(ROUTES.HOME);
- Report.navigateToConciergeChat();
+ Navigation.isNavigationReady().then(() => {
+ Navigation.goBack(ROUTES.HOME);
+ Report.navigateToConciergeChat();
+ });
} else {
Navigation.navigate();
}
diff --git a/src/pages/DetailsPage.js b/src/pages/DetailsPage.js
index 2f8d42c686a9..e4a1b763cd62 100755
--- a/src/pages/DetailsPage.js
+++ b/src/pages/DetailsPage.js
@@ -48,13 +48,10 @@ const propTypes = {
/** Route params */
route: matchType.isRequired,
- /** Login list for the user that is signed in */
- loginList: PropTypes.shape({
- /** Date login was validated, used to show info indicator status */
- validatedDate: PropTypes.string,
-
- /** Field-specific server side errors keyed by microtime */
- errorFields: PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
+ /** Session info for the currently logged in user. */
+ session: PropTypes.shape({
+ /** Currently logged in user accountID */
+ accountID: PropTypes.number,
}),
...withLocalizePropTypes,
@@ -63,7 +60,9 @@ const propTypes = {
const defaultProps = {
// When opening someone else's profile (via deep link) before login, this is empty
personalDetails: {},
- loginList: {},
+ session: {
+ accountID: 0,
+ },
};
/**
@@ -123,7 +122,7 @@ function DetailsPage(props) {
const phoneNumber = getPhoneNumber(details);
const phoneOrEmail = isSMSLogin ? getPhoneNumber(details) : details.login;
- const isCurrentUser = _.keys(props.loginList).includes(details.login);
+ const isCurrentUser = props.session.accountID === details.accountID;
return (
@@ -225,8 +224,8 @@ export default compose(
personalDetails: {
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
},
- loginList: {
- key: ONYXKEYS.LOGIN_LIST,
+ session: {
+ key: ONYXKEYS.SESSION,
},
}),
)(DetailsPage);
diff --git a/src/pages/EditRequestDistancePage.js b/src/pages/EditRequestDistancePage.js
index 3a606aeb8f07..f5beba5fdcfd 100644
--- a/src/pages/EditRequestDistancePage.js
+++ b/src/pages/EditRequestDistancePage.js
@@ -39,13 +39,17 @@ const propTypes = {
/* Onyx props */
/** The original transaction that is being edited */
transaction: transactionPropTypes,
+
+ /** backup version of the original transaction */
+ transactionBackup: transactionPropTypes,
};
const defaultProps = {
transaction: {},
+ transactionBackup: {},
};
-function EditRequestDistancePage({report, route, transaction}) {
+function EditRequestDistancePage({report, route, transaction, transactionBackup}) {
const {isOffline} = useNetwork();
const {translate} = useLocalize();
const transactionWasSaved = useRef(false);
@@ -87,6 +91,16 @@ function EditRequestDistancePage({report, route, transaction}) {
* @param {Object} waypoints
*/
const saveTransaction = (waypoints) => {
+ // If nothing was changed, simply go to transaction thread
+ // We compare only addresses because numbers are rounded while backup
+ const oldWaypoints = lodashGet(transactionBackup, 'comment.waypoints', {});
+ const oldAddresses = _.mapObject(oldWaypoints, (waypoint) => _.pick(waypoint, 'address'));
+ const addresses = _.mapObject(waypoints, (waypoint) => _.pick(waypoint, 'address'));
+ if (_.isEqual(oldAddresses, addresses)) {
+ Navigation.dismissModal(report.reportID);
+ return;
+ }
+
transactionWasSaved.current = true;
IOU.updateDistanceRequest(transaction.transactionID, report.reportID, {waypoints});
@@ -125,4 +139,7 @@ export default withOnyx({
transaction: {
key: (props) => `${ONYXKEYS.COLLECTION.TRANSACTION}${props.transactionID}`,
},
+ transactionBackup: {
+ key: (props) => `${ONYXKEYS.COLLECTION.TRANSACTION}${props.transactionID}-backup`,
+ },
})(EditRequestDistancePage);
diff --git a/src/pages/EditRequestPage.js b/src/pages/EditRequestPage.js
index 28e70dc1a47e..8b19c7cb7b60 100644
--- a/src/pages/EditRequestPage.js
+++ b/src/pages/EditRequestPage.js
@@ -30,6 +30,7 @@ import EditRequestCategoryPage from './EditRequestCategoryPage';
import EditRequestTagPage from './EditRequestTagPage';
import categoryPropTypes from '../components/categoryPropTypes';
import ScreenWrapper from '../components/ScreenWrapper';
+import transactionPropTypes from '../components/transactionPropTypes';
const propTypes = {
/** Route from navigation */
@@ -75,6 +76,9 @@ const propTypes = {
/** Collection of tags attached to a policy */
policyTags: tagPropTypes,
+ /** The original transaction that is being edited */
+ transaction: transactionPropTypes,
+
...withCurrentUserPersonalDetailsPropTypes,
};
@@ -88,10 +92,12 @@ const defaultProps = {
},
policyCategories: {},
policyTags: {},
+ transaction: {},
};
function EditRequestPage({betas, report, route, parentReport, policy, session, policyCategories, policyTags, parentReportActions, transaction}) {
- const parentReportAction = parentReportActions[report.parentReportActionID];
+ const parentReportActionID = lodashGet(report, 'parentReportActionID', '0');
+ const parentReportAction = lodashGet(parentReportActions, parentReportActionID);
const {
amount: transactionAmount,
currency: transactionCurrency,
@@ -321,7 +327,8 @@ export default compose(
withOnyx({
transaction: {
key: ({report, parentReportActions}) => {
- const parentReportAction = lodashGet(parentReportActions, [report.parentReportActionID]);
+ const parentReportActionID = lodashGet(report, 'parentReportActionID', '0');
+ const parentReportAction = lodashGet(parentReportActions, parentReportActionID);
return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(parentReportAction, 'originalMessage.IOUTransactionID', 0)}`;
},
},
diff --git a/src/pages/NewChatPage.js b/src/pages/NewChatPage.js
index c3b66910face..565f36d69e54 100755
--- a/src/pages/NewChatPage.js
+++ b/src/pages/NewChatPage.js
@@ -198,7 +198,7 @@ function NewChatPage({betas, isGroupChat, personalDetails, reports, translate})
onChangeText={setSearchTerm}
headerMessage={headerMessage}
boldStyle
- shouldFocusOnSelectRow={!Browser.isMobile()}
+ shouldPreventDefaultFocusOnSelectRow={!Browser.isMobile()}
shouldShowOptions={isOptionsDataReady}
shouldShowConfirmButton
confirmButtonText={selectedOptions.length > 1 ? translate('newChatPage.createGroup') : translate('newChatPage.createChat')}
diff --git a/src/pages/PrivateNotes/PrivateNotesEditPage.js b/src/pages/PrivateNotes/PrivateNotesEditPage.js
index 183bd6d16233..1bf99a6f5681 100644
--- a/src/pages/PrivateNotes/PrivateNotesEditPage.js
+++ b/src/pages/PrivateNotes/PrivateNotesEditPage.js
@@ -1,4 +1,4 @@
-import React, {useState, useRef, useCallback} from 'react';
+import React, {useState, useRef, useCallback, useMemo} from 'react';
import PropTypes from 'prop-types';
import {Keyboard} from 'react-native';
import {withOnyx} from 'react-native-onyx';
@@ -63,7 +63,23 @@ function PrivateNotesEditPage({route, personalDetailsList, session, report}) {
// We need to edit the note in markdown format, but display it in HTML format
const parser = new ExpensiMark();
- const [privateNote, setPrivateNote] = useState(parser.htmlToMarkdown(lodashGet(report, ['privateNotes', route.params.accountID, 'note'], '')).trim());
+ const [privateNote, setPrivateNote] = useState(
+ Report.getDraftPrivateNote(report.reportID) || parser.htmlToMarkdown(lodashGet(report, ['privateNotes', route.params.accountID, 'note'], '')).trim(),
+ );
+
+ /**
+ * Save the draft of the private note. This debounced so that we're not ceaselessly saving your edit. Saving the draft
+ * allows one to navigate somewhere else and come back to the private note and still have it in edit mode.
+ * @param {String} newDraft
+ */
+ const debouncedSavePrivateNote = useMemo(
+ () =>
+ _.debounce((text) => {
+ Report.savePrivateNotesDraft(report.reportID, text);
+ }, 1000),
+ [report.reportID],
+ );
+
const isCurrentUserNote = Number(session.accountID) === Number(route.params.accountID);
// To focus on the input field when the page loads
@@ -153,7 +169,10 @@ function PrivateNotesEditPage({route, personalDetailsList, session, report}) {
containerStyles={[styles.autoGrowHeightMultilineInput]}
defaultValue={privateNote}
value={privateNote}
- onChangeText={(text) => setPrivateNote(text)}
+ onChangeText={(text) => {
+ debouncedSavePrivateNote(text);
+ setPrivateNote(text);
+ }}
ref={(el) => {
if (!el) {
return;
diff --git a/src/pages/ProfilePage.js b/src/pages/ProfilePage.js
index 7e93f4d99be2..8e0ed04ab94a 100755
--- a/src/pages/ProfilePage.js
+++ b/src/pages/ProfilePage.js
@@ -37,6 +37,7 @@ import variables from '../styles/variables';
import * as ValidationUtils from '../libs/ValidationUtils';
import Permissions from '../libs/Permissions';
import ROUTES from '../ROUTES';
+import MenuItemWithTopDescription from '../components/MenuItemWithTopDescription';
const matchType = PropTypes.shape({
params: PropTypes.shape({
@@ -57,23 +58,25 @@ const propTypes = {
/** Route params */
route: matchType.isRequired,
- /** Login list for the user that is signed in */
- loginList: PropTypes.shape({
- /** Phone/Email associated with user */
- partnerUserID: PropTypes.string,
- }),
-
/** Indicates whether the app is loading initial data */
isLoadingReportData: PropTypes.bool,
+ /** Session info for the currently logged in user. */
+ session: PropTypes.shape({
+ /** Currently logged in user accountID */
+ accountID: PropTypes.number,
+ }),
+
...withLocalizePropTypes,
};
const defaultProps = {
// When opening someone else's profile (via deep link) before login, this is empty
personalDetails: {},
- loginList: {},
isLoadingReportData: true,
+ session: {
+ accountID: 0,
+ },
};
/**
@@ -121,7 +124,7 @@ function ProfilePage(props) {
const phoneNumber = getPhoneNumber(details);
const phoneOrEmail = isSMSLogin ? getPhoneNumber(details) : login;
- const isCurrentUser = _.keys(props.loginList).includes(login);
+ const isCurrentUser = props.session.accountID === accountID;
const hasMinimumDetails = !_.isEmpty(details.avatar);
const isLoading = lodashGet(details, 'isLoading', false) || _.isEmpty(details) || props.isLoadingReportData;
@@ -135,7 +138,7 @@ function ProfilePage(props) {
const navigateBackTo = lodashGet(props.route, 'params.backTo', ROUTES.HOME);
- const chatReportWithCurrentUser = !isCurrentUser && !Session.isAnonymousUser() ? ReportUtils.getChatByParticipants([accountID]) : 0;
+ const notificationPreference = !_.isEmpty(props.report) ? props.translate(`notificationPreferencesPage.notificationPreferences.${props.report.notificationPreference}`) : '';
// eslint-disable-next-line rulesdir/prefer-early-return
useEffect(() => {
@@ -231,6 +234,15 @@ function ProfilePage(props) {
) : null}
{shouldShowLocalTime && }
+ {!_.isEmpty(props.report) && notificationPreference !== CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN && (
+ Navigation.navigate(ROUTES.REPORT_SETTINGS_NOTIFICATION_PREFERENCES.getRoute(props.report.reportID))}
+ wrapperStyle={[styles.mtn6, styles.mb5]}
+ />
+ )}
{!isCurrentUser && !Session.isAnonymousUser() && (
)}
- {!_.isEmpty(chatReportWithCurrentUser) && (
+ {!_.isEmpty(props.report) && (