diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index c909ec8..50bc02b 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -1,3 +1,8 @@ +import kotlin.text.all +import kotlin.text.find +import kotlin.text.isNotEmpty +import kotlin.text.replace + plugins { id("com.android.application") id("kotlin-android") @@ -37,6 +42,22 @@ android { signingConfig = signingConfigs.getByName("debug") } } + + applicationVariants.all { + val variant = this + variant.outputs.all { + val output = this + // Get the architecture (ABI) for the current output. Note: Flutter often uses 'armeabi-v7a', 'arm64-v8a', etc. + val abi = output.filters.find { it.filterType == "ABI" }?.identifier?.replace("armeabi-", "") ?: "" + + // Make sure we are dealing with an APK output + if (output is com.android.build.gradle.internal.api.ApkVariantOutputImpl) { + // Append the ABI to the filename, with a hyphen if it exists + val abiSuffix = if (abi.isNotEmpty()) "-$abi" else "" + output.outputFileName = "Hadi & Hoda v${variant.versionName}+${variant.versionCode}${abiSuffix}.apk" + } + } + } } flutter { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b6f48eb..da9f7d3 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..fbed9e6 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png new file mode 100644 index 0000000..0f49254 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..463e48d Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..a53bddc Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..613323d 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png new file mode 100644 index 0000000..8158f9d Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..deb5fc6 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..a3786f6 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..0966c12 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png new file mode 100644 index 0000000..1ef0149 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..4efb006 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..ccdd138 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..709fd79 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000..d6cb20a Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..521cb43 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..869d563 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..59970e1 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png new file mode 100644 index 0000000..f27bbad Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..9fe49df Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..dcef21f Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png differ diff --git a/assets/animations/Celebration.json b/assets/animations/Celebration.json new file mode 100644 index 0000000..dbf53c3 --- /dev/null +++ b/assets/animations/Celebration.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 1.0.0","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":32,"w":800,"h":800,"nm":"Lottie_Main_Comp 2","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Master","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,461.657,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Star_03","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"t":84,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.006],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[-720]},{"t":90,"s":[-1149]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.894},"o":{"x":0.167,"y":0.106},"t":14,"s":[-72.808,4.062,0],"to":[7.808,-75.062,0],"ti":[0,0,0]},{"t":84,"s":[2.192,-72.938,0]}],"ix":2},"a":{"a":0,"k":[231.37,449.226,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":14,"s":[0,0,100]},{"t":54,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-36.571,-9.612],[-27.799,-1.99],[-36.683,5.428]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[3.95,-9.308],[-4.935,-1.817],[3.838,5.731]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":14,"s":[100],"h":1},{"t":34,"s":[0],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[247.846,433.746],"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":"Eyes_Closed","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":34,"s":[{"i":[[0.013,-0.202],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.096,-0.1],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.733,-0.323]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0.054,-2.972],[2.972,0.054],[-0.054,2.973],[-2.976,-0.054]],"o":[[-0.054,2.976],[-2.972,-0.054],[0.054,-2.973],[2.971,0.054]],"v":[[-18.385,0.097],[-23.869,5.385],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0.054,-2.972],[2.972,0.054],[-0.054,2.973],[-2.976,-0.054]],"o":[[-0.054,2.976],[-2.972,-0.054],[0.054,-2.973],[2.971,0.054]],"v":[[-18.385,0.097],[-23.869,5.385],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":68,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":71,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":74,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":77,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":83,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":86,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":92,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":95,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":98,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":101,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":104,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":107,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"t":110,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":34,"s":[{"i":[[0.023,-0.016],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[0.014,-0.036],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.014,-0.105]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0.003,-2.973],[2.973,0.003],[-0.003,2.973],[-2.976,-0.003]],"o":[[-0.003,2.976],[-2.974,-0.003],[0.003,-2.973],[2.971,0.003]],"v":[[5.386,0.004],[-0.006,5.385],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0.003,-2.973],[2.973,0.003],[-0.003,2.973],[-2.976,-0.003]],"o":[[-0.003,2.976],[-2.974,-0.003],[0.003,-2.973],[2.971,0.003]],"v":[[5.386,0.004],[-0.006,5.385],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":68,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":71,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":74,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":77,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":83,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":86,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":92,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":95,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":98,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":101,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":104,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":107,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"t":110,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":4},"o":{"a":1,"k":[{"t":14,"s":[0],"h":1},{"t":34,"s":[100],"h":1}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[242.997,431.73],"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":"Eyes_Open","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[0.109,-0.906],[13.65,0.572],[1.781,12.531],[0,0],[-24,-0.295]],"o":[[0,0],[-1.541,12.793],[-13.007,-0.545],[-0.128,-0.903],[0,0],[22.624,0.278]],"v":[[23.024,-8.94],[22.994,-8.863],[-2.946,14.608],[-28.522,-7.528],[-28.716,-8.86],[-2.671,14.6]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":62,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,14.608],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":65,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,17.108],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":68,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":71,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":74,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":77,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":83,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":86,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":92,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":95,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":98,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":101,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":104,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":107,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"t":110,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":4},"o":{"a":1,"k":[{"t":14,"s":[0],"h":1},{"t":54,"s":[100],"h":1}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":14,"s":[0],"h":1},{"t":54,"s":[100],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"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":[233.421,461.195],"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":"Open Smile","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],[-13.602,0.167],[-0.817,13.364]],"o":[[1.145,13.34],[13.603,-0.166],[0,0]],"v":[[-25.719,-11.551],[0.292,12.014],[25.719,-12.182]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[45]},{"t":34,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[55]},{"t":34,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":14,"s":[100],"h":1},{"t":54,"s":[0],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"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":[230.43,463.945],"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":"Smile","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":[[10.322,1.475],[0,0],[4.634,9.335],[0,0],[3.041,-0.007],[0,0],[-4.62,-2.413],[0,0],[1.789,10.268],[0,0],[-7.447,7.297],[0,0]],"o":[[0,0],[-10.319,-1.474],[0,0],[-2.319,-4.67],[0,0],[6.08,-0.016],[0,0],[9.237,4.826],[0,0],[-1.79,-10.269],[0,0],[7.447,-7.294]],"v":[[30.878,-26.746],[4.089,-30.567],[-23.103,-50.22],[-35.144,-74.456],[-43.549,-81.447],[-43.189,60.499],[-26.405,64.095],[-2.419,76.628],[11.128,66.733],[6.486,40.071],[16.773,8.136],[36.102,-10.803]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.769999980927,0.070000000298,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":[275.242,440.626],"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":"Body_shader","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],[-4.636,-9.336],[0,0],[-10.32,-1.474],[0,0],[7.448,-7.294],[0,0],[-1.789,-10.269],[0,0],[9.237,4.826],[0,0],[9.213,-4.873],[0,0],[-1.735,10.277],[0,0],[7.482,7.258],[0,0],[-10.314,1.526],[0,0],[-4.59,9.36]],"o":[[4.59,-9.359],[0,0],[4.634,9.335],[0,0],[10.322,1.475],[0,0],[-7.446,7.297],[0,0],[1.788,10.269],[0,0],[-9.237,-4.826],[0,0],[-9.215,4.873],[0,0],[1.736,-10.28],[0,0],[-7.482,-7.256],[0,0],[10.315,-1.525],[0,0]],"v":[[-8.533,-73.371],[8.244,-73.413],[20.285,-49.178],[47.477,-29.525],[74.265,-25.704],[79.489,-9.76],[60.16,9.178],[49.874,41.114],[54.515,67.775],[40.969,77.671],[16.983,65.137],[-16.569,65.22],[-40.491,77.876],[-54.088,68.051],[-49.58,41.366],[-60.029,9.483],[-79.455,-9.358],[-74.312,-25.327],[-47.543,-29.285],[-20.447,-49.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.829999983311,0.439999997616,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":[231.695,439.583],"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":"Body","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":90,"op":90,"st":14,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Star_02","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":89,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[-720]},{"t":107,"s":[-1509]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":7,"s":[-55.808,-64.938,0],"to":[-20,-147.833,0],"ti":[-2,-323.167,0]},{"t":90,"s":[-234.808,76.062,0]}],"ix":2},"a":{"a":0,"k":[231.37,449.226,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":7,"s":[0,0,100]},{"t":47,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-36.571,-9.612],[-27.799,-1.99],[-36.683,5.428]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[3.95,-9.308],[-4.935,-1.817],[3.838,5.731]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":7,"s":[100],"h":1},{"t":27,"s":[0],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[247.846,433.746],"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":"Eyes_Closed","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[{"i":[[0.013,-0.202],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.096,-0.1],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.733,-0.323]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[{"i":[[0.054,-2.972],[2.972,0.054],[-0.054,2.973],[-2.976,-0.054]],"o":[[-0.054,2.976],[-2.972,-0.054],[0.054,-2.973],[2.971,0.054]],"v":[[-18.385,0.097],[-23.869,5.385],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":47,"s":[{"i":[[0.054,-2.972],[2.972,0.054],[-0.054,2.973],[-2.976,-0.054]],"o":[[-0.054,2.976],[-2.972,-0.054],[0.054,-2.973],[2.971,0.054]],"v":[[-18.385,0.097],[-23.869,5.385],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":55,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":61,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":64,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":67,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":76,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":79,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":82,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":88,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":91,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":94,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":97,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"t":103,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[{"i":[[0.023,-0.016],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[0.014,-0.036],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.014,-0.105]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[{"i":[[0.003,-2.973],[2.973,0.003],[-0.003,2.973],[-2.976,-0.003]],"o":[[-0.003,2.976],[-2.974,-0.003],[0.003,-2.973],[2.971,0.003]],"v":[[5.386,0.004],[-0.006,5.385],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":47,"s":[{"i":[[0.003,-2.973],[2.973,0.003],[-0.003,2.973],[-2.976,-0.003]],"o":[[-0.003,2.976],[-2.974,-0.003],[0.003,-2.973],[2.971,0.003]],"v":[[5.386,0.004],[-0.006,5.385],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":55,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":61,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":64,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":67,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":76,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":79,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":82,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":88,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":91,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":94,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":97,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"t":103,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":4},"o":{"a":1,"k":[{"t":7,"s":[0],"h":1},{"t":27,"s":[100],"h":1}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[242.997,431.73],"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":"Eyes_Open","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":47,"s":[{"i":[[0,0],[0.109,-0.906],[13.65,0.572],[1.781,12.531],[0,0],[-24,-0.295]],"o":[[0,0],[-1.541,12.793],[-13.007,-0.545],[-0.128,-0.903],[0,0],[22.624,0.278]],"v":[[23.024,-8.94],[22.994,-8.863],[-2.946,14.608],[-28.522,-7.528],[-28.716,-8.86],[-2.671,14.6]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":55,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,14.608],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":58,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,17.108],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":61,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":64,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":67,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":76,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":79,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":82,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":88,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":91,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":94,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":97,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"t":103,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":4},"o":{"a":1,"k":[{"t":7,"s":[0],"h":1},{"t":47,"s":[100],"h":1}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":7,"s":[0],"h":1},{"t":47,"s":[100],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"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":[233.421,461.195],"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":"Open Smile","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],[-13.602,0.167],[-0.817,13.364]],"o":[[1.145,13.34],[13.603,-0.166],[0,0]],"v":[[-25.719,-11.551],[0.292,12.014],[25.719,-12.182]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[45]},{"t":27,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[55]},{"t":27,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":7,"s":[100],"h":1},{"t":47,"s":[0],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"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":[230.43,463.945],"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":"Smile","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":[[10.322,1.475],[0,0],[4.634,9.335],[0,0],[3.041,-0.007],[0,0],[-4.62,-2.413],[0,0],[1.789,10.268],[0,0],[-7.447,7.297],[0,0]],"o":[[0,0],[-10.319,-1.474],[0,0],[-2.319,-4.67],[0,0],[6.08,-0.016],[0,0],[9.237,4.826],[0,0],[-1.79,-10.269],[0,0],[7.447,-7.294]],"v":[[30.878,-26.746],[4.089,-30.567],[-23.103,-50.22],[-35.144,-74.456],[-43.549,-81.447],[-43.189,60.499],[-26.405,64.095],[-2.419,76.628],[11.128,66.733],[6.486,40.071],[16.773,8.136],[36.102,-10.803]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.769999980927,0.070000000298,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":[275.242,440.626],"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":"Body_shader","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],[-4.636,-9.336],[0,0],[-10.32,-1.474],[0,0],[7.448,-7.294],[0,0],[-1.789,-10.269],[0,0],[9.237,4.826],[0,0],[9.213,-4.873],[0,0],[-1.735,10.277],[0,0],[7.482,7.258],[0,0],[-10.314,1.526],[0,0],[-4.59,9.36]],"o":[[4.59,-9.359],[0,0],[4.634,9.335],[0,0],[10.322,1.475],[0,0],[-7.446,7.297],[0,0],[1.788,10.269],[0,0],[-9.237,-4.826],[0,0],[-9.215,4.873],[0,0],[1.736,-10.28],[0,0],[-7.482,-7.256],[0,0],[10.315,-1.525],[0,0]],"v":[[-8.533,-73.371],[8.244,-73.413],[20.285,-49.178],[47.477,-29.525],[74.265,-25.704],[79.489,-9.76],[60.16,9.178],[49.874,41.114],[54.515,67.775],[40.969,77.671],[16.983,65.137],[-16.569,65.22],[-40.491,77.876],[-54.088,68.051],[-49.58,41.366],[-60.029,9.483],[-79.455,-9.358],[-74.312,-25.327],[-47.543,-29.285],[-20.447,-49.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.829999983311,0.439999997616,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":[231.695,439.583],"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":"Body","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":90,"op":90,"st":7,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Star_01","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[100]},{"t":75,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-720]},{"t":90,"s":[60]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.908},"o":{"x":0.333,"y":0},"t":0,"s":[31.192,-0.938,0],"to":[27,-133.833,0],"ti":[-7,-196.167,0]},{"t":90,"s":[223.192,87.062,0]}],"ix":2},"a":{"a":0,"k":[231.37,449.226,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"t":40,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-36.571,-9.612],[-27.799,-1.99],[-36.683,5.428]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[3.95,-9.308],[-4.935,-1.817],[3.838,5.731]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":20,"s":[0],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[247.846,433.746],"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":"Eyes_Closed","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0.013,-0.202],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.096,-0.1],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.733,-0.323]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0.054,-2.972],[2.972,0.054],[-0.054,2.973],[-2.976,-0.054]],"o":[[-0.054,2.976],[-2.972,-0.054],[0.054,-2.973],[2.971,0.054]],"v":[[-18.385,0.097],[-23.869,5.385],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0.054,-2.972],[2.972,0.054],[-0.054,2.973],[-2.976,-0.054]],"o":[[-0.054,2.976],[-2.972,-0.054],[0.054,-2.973],[2.971,0.054]],"v":[[-18.385,0.097],[-23.869,5.385],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":48,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":54,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":57,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":63,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":66,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":69,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":72,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":75,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":78,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":81,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":84,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":87,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":93,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.769,-0.053],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]},{"t":96,"s":[{"i":[[0.049,-2.972],[2.972,0.054],[0.096,-0.006],[-2.976,-0.054]],"o":[[0.013,-0.015],[-2.972,-0.054],[0.083,-2.972],[2.971,0.054]],"v":[[-18.385,0.097],[-23.644,-0.884],[-29.155,-0.099],[-23.671,-5.385]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[{"i":[[0.023,-0.016],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[0.014,-0.036],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.014,-0.105]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0.003,-2.973],[2.973,0.003],[-0.003,2.973],[-2.976,-0.003]],"o":[[-0.003,2.976],[-2.974,-0.003],[0.003,-2.973],[2.971,0.003]],"v":[[5.386,0.004],[-0.006,5.385],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0.003,-2.973],[2.973,0.003],[-0.003,2.973],[-2.976,-0.003]],"o":[[-0.003,2.976],[-2.974,-0.003],[0.003,-2.973],[2.971,0.003]],"v":[[5.386,0.004],[-0.006,5.385],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":48,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":54,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":57,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":63,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":66,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":69,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":72,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":75,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":78,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":81,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":84,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":87,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":93,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.02,-0.021],[-5.386,-0.006],[0.007,-5.386]],"c":true}]},{"t":96,"s":[{"i":[[0.116,-2.97],[2.973,0.003],[0.014,0.057],[-2.976,-0.003]],"o":[[0.054,0.078],[-2.974,-0.003],[-0.236,-3.255],[2.971,0.003]],"v":[[5.386,0.004],[0.145,-0.852],[-5.386,-0.006],[0.007,-5.386]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":4},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":20,"s":[100],"h":1}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[242.997,431.73],"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":"Eyes_Open","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[0.109,-0.906],[13.65,0.572],[1.781,12.531],[0,0],[-24,-0.295]],"o":[[0,0],[-1.541,12.793],[-13.007,-0.545],[-0.128,-0.903],[0,0],[22.624,0.278]],"v":[[23.024,-8.94],[22.994,-8.863],[-2.946,14.608],[-28.522,-7.528],[-28.716,-8.86],[-2.671,14.6]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":48,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,14.608],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":51,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,17.108],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":54,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":57,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":63,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":66,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":69,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":72,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":75,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":78,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":81,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":84,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":87,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":93,"s":[{"i":[[0,0],[0.123,-0.904],[13.118,0.071],[1.781,12.531],[-0.771,0.001],[-13.559,-0.008]],"o":[[0.771,-0.001],[-1.708,12.576],[-13.016,-0.067],[-0.128,-0.903],[0,0],[13.343,0.006]],"v":[[21.337,-9.257],[22.625,-7.808],[-2.946,14.608],[-28.522,-7.528],[-27.263,-9.176],[-2.671,-5.545]],"c":true}]},{"t":96,"s":[{"i":[[0,0],[0.125,-0.904],[13.019,-0.021],[1.781,12.531],[-0.913,0.001],[-11.625,0.045]],"o":[[0.913,-0.002],[-1.74,12.536],[-13.018,0.021],[-0.128,-0.903],[0,0],[11.625,-0.045]],"v":[[21.024,-9.315],[22.557,-7.613],[-2.946,17.295],[-28.522,-7.528],[-26.994,-9.235],[-2.671,-9.275]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":4},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":40,"s":[100],"h":1}],"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":40,"s":[100],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"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":[233.421,461.195],"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":"Open Smile","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],[-13.602,0.167],[-0.817,13.364]],"o":[[1.145,13.34],[13.603,-0.166],[0,0]],"v":[[-25.719,-11.551],[0.292,12.014],[25.719,-12.182]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[45]},{"t":20,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[55]},{"t":20,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.790000021458,0.560000002384,0.219999998808,1],"ix":3},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":40,"s":[0],"h":1}],"ix":4},"w":{"a":0,"k":2.641,"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":[230.43,463.945],"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":"Smile","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":[[10.322,1.475],[0,0],[4.634,9.335],[0,0],[3.041,-0.007],[0,0],[-4.62,-2.413],[0,0],[1.789,10.268],[0,0],[-7.447,7.297],[0,0]],"o":[[0,0],[-10.319,-1.474],[0,0],[-2.319,-4.67],[0,0],[6.08,-0.016],[0,0],[9.237,4.826],[0,0],[-1.79,-10.269],[0,0],[7.447,-7.294]],"v":[[30.878,-26.746],[4.089,-30.567],[-23.103,-50.22],[-35.144,-74.456],[-43.549,-81.447],[-43.189,60.499],[-26.405,64.095],[-2.419,76.628],[11.128,66.733],[6.486,40.071],[16.773,8.136],[36.102,-10.803]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.769999980927,0.070000000298,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":[275.242,440.626],"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":"Body_shader","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],[-4.636,-9.336],[0,0],[-10.32,-1.474],[0,0],[7.448,-7.294],[0,0],[-1.789,-10.269],[0,0],[9.237,4.826],[0,0],[9.213,-4.873],[0,0],[-1.735,10.277],[0,0],[7.482,7.258],[0,0],[-10.314,1.526],[0,0],[-4.59,9.36]],"o":[[4.59,-9.359],[0,0],[4.634,9.335],[0,0],[10.322,1.475],[0,0],[-7.446,7.297],[0,0],[1.788,10.269],[0,0],[-9.237,-4.826],[0,0],[-9.215,4.873],[0,0],[1.736,-10.28],[0,0],[-7.482,-7.256],[0,0],[10.315,-1.525],[0,0]],"v":[[-8.533,-73.371],[8.244,-73.413],[20.285,-49.178],[47.477,-29.525],[74.265,-25.704],[79.489,-9.76],[60.16,9.178],[49.874,41.114],[54.515,67.775],[40.969,77.671],[16.983,65.137],[-16.569,65.22],[-40.491,77.876],[-54.088,68.051],[-49.58,41.366],[-60.029,9.483],[-79.455,-9.358],[-74.312,-25.327],[-47.543,-29.285],[-20.447,-49.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.829999983311,0.439999997616,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":[231.695,439.583],"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":"Body","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":90,"op":90,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Fireworks_08","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.733,3.212],[3.516,3.448],[1.007,-0.109],[-0.831,-1.602],[-1.804,-0.048],[-1.498,2.82],[1.857,2.598],[1.894,4.895],[-2.186,3.33],[0.394,3.963],[4.488,1.512],[0.67,2.591],[-1.061,1.667],[3.352,6.121],[-0.017,5.733],[-0.824,5.056],[1.288,6.795],[2.266,9.62],[0.775,2.384],[-2.086,5.33]],"o":[[4.912,0.354],[3.734,-3.212],[-0.723,-0.709],[-1.794,0.194],[0.831,1.602],[3.192,0.085],[1.498,-2.82],[-3.052,-4.27],[-1.438,-3.716],[2.186,-3.33],[-0.468,-4.712],[-2.536,-0.855],[-0.495,-1.913],[3.747,-5.888],[-2.754,-5.028],[0.015,-5.123],[1.113,-6.827],[-1.84,-9.71],[-0.575,-2.44],[-1.769,-5.444],[0,0]],"v":[[19.657,33.614],[33.618,30.114],[35.047,17.054],[32.352,15.881],[30.503,20.092],[35.067,22.494],[42.924,17.911],[42.323,8.835],[30.752,-1.506],[33.523,-12.651],[37.839,-23.525],[28.4,-33.073],[22.087,-37.425],[23.799,-42.917],[27.536,-62.474],[17.953,-76.278],[24.534,-89.921],[16.335,-108.508],[24.585,-136.227],[21.753,-143.18],[24.179,-159.818]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.670000016689,0.870000004768,0.870000004768,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46.381,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":68.762,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":70,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":103,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":104,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":643,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":644,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":676.381,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":698.762,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":700,"s":[0]},{"t":733,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":103,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":643,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":644,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":655,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":697,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":700,"s":[100]},{"t":733,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":68.762,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":103,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":643,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":644,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":654,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":698.762,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":700,"s":[100]},{"t":733,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":14,"op":450,"st":24,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Fireworks_07","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.987,2.255],[-3.851,-0.605],[-3.81,0.826],[0.199,3.894],[-0.057,1.725],[-3.528,0.655],[-3.35,1.286],[-0.385,4.173],[-1.666,2.264],[-4.338,1.184],[0.652,6.571],[-0.575,1.771],[-4.258,0.478],[-2.004,3.788],[0.798,2.901],[-1.515,4.958],[-6.098,3.216],[-0.018,8.318],[-2.756,4.522]],"o":[[-1.536,-4.314],[3.393,-1.919],[3.852,0.605],[3.811,-0.825],[-0.088,-1.723],[0.118,-3.586],[3.529,-0.654],[3.912,-1.503],[0.258,-2.799],[2.666,-3.621],[6.371,-1.74],[-0.183,-1.853],[1.322,-4.076],[4.258,-0.479],[1.407,-2.659],[-1.374,-4.999],[2.015,-6.594],[7.358,-3.88],[0.011,-5.295],[0,0]],"v":[[168.47,147.842],[172.892,135.992],[184.314,134.937],[195.915,135.611],[203.185,127.697],[202.336,122.605],[209.757,115.984],[220.374,114.415],[227.58,104.899],[228.797,96.697],[241.534,93.832],[249.311,77.395],[249.402,71.854],[260.021,65.997],[271.274,60.989],[271.241,52.188],[269.636,36.947],[284.659,23.584],[299.994,5.52],[299.485,-10.017]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.910000026226,0.319999992847,0.610000014305,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":12,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41.048,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60.096,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":101,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":102,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":641,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":642,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":671.048,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":690.096,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":698,"s":[0]},{"t":731,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":23.904,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":68,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":101,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":641,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":642,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":653.904,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":692,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":698,"s":[100]},{"t":731,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60.096,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":68,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":101,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":641,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":642,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":652,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":690.096,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":698,"s":[100]},{"t":731,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":12,"op":450,"st":22,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Fireworks_06","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.281,4.43],[-0.914,3.014],[5.89,1.428],[1.278,-0.706],[-0.398,-2.024],[-1.595,-1.307],[-5.767,2.717],[-1.596,6.171],[3.096,3.922],[3.061,0.395],[-0.362,-3.113],[-0.844,-0.845],[-5.948,1.68],[-4.203,4.531],[-0.402,6.099],[7.253,2.417],[1.355,-3.406],[-1.315,-1.81],[-5.511,1.088],[-3.533,4.367],[0.195,7.031],[5.769,4.024],[2.472,-0.019],[1.072,-2.228],[-1.583,-1.944],[-2.424,-0.639],[-4.257,7.616],[6.316,6.022],[2.637,-1.208],[-1.496,-2.496],[-2.893,0.316],[-2.212,1.892],[-0.927,3.55],[2.473,2.71]],"o":[[6.373,2.623],[2.413,-2.024],[1.757,-5.8],[-1.419,-0.345],[-1.805,0.998],[0.397,2.024],[4.929,4.043],[5.767,-2.716],[1.252,-4.838],[-1.912,-2.422],[-3.109,-0.402],[0.138,1.187],[4.367,4.372],[5.948,-1.679],[4.157,-4.48],[0.503,-7.629],[-3.478,-1.159],[-0.826,2.079],[3.303,4.544],[5.511,-1.089],[4.423,-5.47],[-0.195,-7.031],[-2.027,-1.414],[-2.472,0.019],[-1.087,2.258],[1.582,1.944],[8.437,2.224],[4.257,-7.617],[-2.098,-2.001],[-2.645,1.213],[1.495,2.497],[2.892,-0.316],[2.788,-2.385],[0.926,-3.551],[0,0]],"v":[[155.107,26.434],[174.284,22.087],[179.759,14.55],[171.698,0.45],[167.431,0.768],[165.247,6.125],[168.605,11.174],[186.637,13.021],[198.146,-1.482],[195.964,-15.777],[188.107,-20.228],[181.374,-15.649],[183.12,-12.598],[200.404,-8.883],[215.596,-19.099],[223.786,-35.098],[211.8,-52.728],[202.231,-49.982],[203.534,-43.686],[218.597,-38.425],[232.409,-47.474],[239.401,-66.919],[230.087,-85.004],[223.214,-87.454],[217.117,-83.941],[218.253,-76.909],[224.63,-73.166],[247.016,-82.674],[243.387,-106.723],[235.556,-109.098],[233.618,-101.608],[241.18,-98.275],[248.909,-102.043],[254.954,-111.038],[252.759,-121.366]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.730000019073,0.730000019073,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":10,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60.001,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":99,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":100,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":639,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":640,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":670,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":690.001,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":696,"s":[0]},{"t":729,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":99,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":639,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":640,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":652,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":692,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":696,"s":[100]},{"t":729,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":10,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60.001,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":99,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":639,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":640,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":650,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":690.001,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":696,"s":[100]},{"t":729,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":10,"op":450,"st":20,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Fireworks_05","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4.131,7.797],[-5.227,7.109],[-8.766,-1.006],[-2.056,-1.844],[1.011,-2.57],[2.071,-1.017],[11.297,8.656],[-0.667,11.76],[-11.746,0.887],[-2.541,-1.671],[0.36,-3.02],[2.745,-1.724],[12.069,6.836],[4.344,10.921],[-2.995,9.212],[-2.692,2.073],[-2.84,0.366],[-3.616,-4.508],[6.115,-4.567],[7.593,0.777],[7.683,3.722],[3.783,5.39],[0.942,5.093],[-3.631,7.488],[-8.288,0.753]],"o":[[-8.772,0.947],[-4.13,-7.797],[5.226,-7.109],[2.743,0.315],[2.056,1.843],[-0.844,2.146],[-12.773,6.277],[-9.35,-7.164],[0.667,-11.759],[3.033,-0.229],[2.541,1.671],[-0.384,3.219],[-11.744,7.379],[-10.227,-5.792],[-3.581,-9.002],[1.05,-3.231],[2.268,-1.747],[5.732,-0.739],[4.777,5.954],[-6.116,4.567],[-8.493,-0.868],[-5.926,-2.871],[-2.976,-4.239],[-1.513,-8.184],[3.631,-7.489],[0,0]],"v":[[21.947,19.676],[-0.004,7.853],[1.987,-17.173],[25.207,-27.138],[32.799,-24.171],[34.978,-16.7],[29.978,-12.152],[-10.184,-17.613],[-25.547,-47.891],[-3.824,-71.879],[4.928,-69.965],[8.88,-62.255],[3.165,-54.794],[-36.376,-57.061],[-59.814,-82.497],[-60.73,-110.966],[-55.446,-119.498],[-47.461,-122.373],[-31.596,-117.55],[-35.706,-97.459],[-57.634,-93.077],[-82.148,-100.034],[-97.524,-112.094],[-103.116,-126.461],[-100.635,-150.883],[-81.46,-165.113]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.730000019073,0.730000019073,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34.667,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":51.334,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":64,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":97,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":98,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":637,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":638,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":664.667,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":681.334,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":694,"s":[0]},{"t":727,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19.666,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":97,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":637,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":638,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":649.666,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":683,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":694,"s":[100]},{"t":727,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":51.334,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":97,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":637,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":638,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":648,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":681.334,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":694,"s":[100]},{"t":727,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":8,"op":450,"st":18,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Fireworks_04","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.913,5.269],[1.635,5.641],[2.07,9.641],[-1.235,6.159],[3.608,2.85],[2.872,6.752],[1.643,6.444],[3.337,2.11],[2.014,7.467],[0.352,3.318],[3.517,3.226],[3.39,3.021],[1.953,8.137]],"o":[[-4.197,-3.313],[1.002,-5.787],[-2.745,-9.471],[-1.319,-6.142],[0.904,-4.508],[-5.759,-4.546],[-2.603,-6.119],[-0.976,-3.826],[-6.538,-4.133],[-0.869,-3.222],[-0.503,-4.746],[-3.347,-3.069],[-6.248,-5.568],[0,0]],"v":[[-57.252,23.762],[-62.715,9.49],[-58.964,-7.44],[-80.304,-26.391],[-74.597,-44.016],[-79.12,-56.32],[-97.537,-67.369],[-96.248,-86.954],[-103.868,-95.641],[-120.542,-110.88],[-121.281,-120.84],[-127.589,-133.348],[-138.641,-141.284],[-149.101,-163.655]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.910000026226,0.319999992847,0.610000014305,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":6,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33.144,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50.286,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":62,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":96,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":635,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":636,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":663.144,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":680.286,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":692,"s":[0]},{"t":725,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":6,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":17.714,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":635,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":636,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":647.714,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":682,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":692,"s":[100]},{"t":725,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":6,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50.286,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":635,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":636,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":646,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":680.286,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":692,"s":[100]},{"t":725,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":6,"op":450,"st":16,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Fireworks_03","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[6.04,1.773],[1.254,-6.169],[-0.817,-1.005],[-1.139,2.006],[1.203,1.968],[4.066,-0.354],[1.495,-3.798],[3.934,-5.435],[5.091,0.029],[3.978,-3.177],[-1.497,-5.865],[2.314,-2.52],[2.526,-0.02],[4.235,-7.851],[6.161,-3.967],[5.996,-2.631],[6.393,-6.106],[8.746,-9.115],[2.019,-2.488],[7.167,-1.468]],"o":[[-3.035,-5.515],[-6.041,-1.772],[-0.258,1.269],[1.455,1.789],[1.14,-2.005],[-2.128,-3.483],[-4.066,0.354],[-2.458,6.242],[-2.986,4.125],[-5.092,-0.03],[-4.729,3.778],[0.846,3.314],[-1.708,1.861],[-8.921,0.074],[-3.479,6.449],[-5.505,3.545],[-8.096,3.552],[-9.136,8.724],[-2.218,2.313],[-4.609,5.682],[0,0]],"v":[[-89.377,35.497],[-102.837,22.955],[-117.839,30.501],[-117.223,34.207],[-111.421,33.263],[-112.017,26.697],[-122.395,21.455],[-131.712,28.41],[-134.761,48.01],[-148.642,52.786],[-163.307,55.715],[-166.986,72.477],[-167.266,82.274],[-174.347,84.255],[-197.923,93.843],[-206.068,113.718],[-225.276,116.143],[-239.515,137.858],[-274.982,148.278],[-280.472,156.15],[-300.005,165.113]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.910000026226,0.319999992847,0.610000014305,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33.524,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53.048,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":93,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":94,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":633,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":634,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":663.524,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":683.048,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":690,"s":[0]},{"t":723,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15.952,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":93,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":633,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":634,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":645.952,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":685,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":690,"s":[100]},{"t":723,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53.048,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":93,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":633,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":634,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":644,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":683.048,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":690,"s":[100]},{"t":723,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":4,"op":450,"st":14,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Fireworks_02","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-7.933,14.672],[0.349,16.675],[5.473,5.656],[4.908,1.164],[4.876,-2.608],[-1.549,-5.308],[-6.55,-0.009],[-1.872,0.928],[-0.997,4.469],[2.661,12.031],[2.233,3.641],[3.652,2.818],[8.412,2.835]],"o":[[11.892,-11.695],[7.932,-14.672],[-0.166,-7.869],[-3.508,-3.625],[-5.381,-1.276],[-4.876,2.608],[1.834,6.288],[2.089,0.003],[4.103,-2.034],[2.684,-12.026],[-0.923,-4.171],[-2.412,-3.933],[-7.029,-5.423],[0,0]],"v":[[119.191,30.962],[149.872,-8.329],[162.384,-56.202],[155.159,-78.093],[141.943,-85.036],[125.763,-83.813],[119.055,-70.028],[134.91,-60.892],[141.017,-62.022],[147.861,-73.389],[147.896,-110.061],[143.478,-122.026],[133.96,-131.966],[110.582,-144.469]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.769999980927,0.070000000298,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":2,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27.715,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":43.429,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":91,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":92,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":631,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":632,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":657.715,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":673.429,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":688,"s":[0]},{"t":721,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":2,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":13.571,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":91,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":631,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":632,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":643.571,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":675,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":688,"s":[100]},{"t":721,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":2,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":43.429,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":91,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":631,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":632,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":642,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":673.429,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":688,"s":[100]},{"t":721,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":2,"op":450,"st":12,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Fireworks_01","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41,-125.553,0],"ix":2},"a":{"a":0,"k":[312.5,177.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[11.69,6.335],[-0.042,3.716],[-1.247,1.266],[-2.612,-1.139],[1.105,-2.627],[5.141,2.153],[1.829,8.959],[3.076,2.136],[3.312,2.666],[6.996,6.602],[3.62,1.755],[1.41,3.485],[2.977,4.448],[4.619,1.026],[4.136,2.297],[3.748,5.272],[6.456,0.411]],"o":[[-11.36,6.845],[-3.267,-1.77],[0.02,-1.777],[2,-2.029],[2.611,1.139],[-2.791,6.636],[-9.286,-3.889],[-0.75,-3.67],[-3.493,-2.425],[-7.686,-6.189],[-2.926,-2.762],[-3.383,-1.641],[-2.008,-4.961],[-2.632,-3.932],[-4.619,-1.026],[-5.656,-3.142],[-3.749,-5.273],[0,0]],"v":[[-87.104,119.435],[-125.246,120.525],[-131.776,112.185],[-129.676,107.427],[-121.832,105.665],[-118.75,112.73],[-140.586,115.83],[-152.583,96.072],[-157.893,86.484],[-169.572,81.55],[-177.838,56.291],[-188.771,51.385],[-196.302,43.331],[-200.687,27.987],[-212.76,21.213],[-226.362,17.374],[-239.172,3.039],[-254.425,-7.871]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.769999980927,0.070000000298,1],"ix":3},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24.762,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":39.524,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":90,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":629,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":630,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":654.762,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":669.524,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":686,"s":[0]},{"t":719,"s":[0]}],"ix":4},"w":{"a":0,"k":4.829,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11.477,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":41,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":629,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":630,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":641.477,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":671,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":686,"s":[100]},{"t":719,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":39.524,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":629,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":630,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":640,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":669.524,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":686,"s":[100]},{"t":719,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[312.078,177.185],"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":450,"st":10,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Fireworks","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[0]},{"t":93,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[7.784,-100.71,0],"to":[0,33.333,0],"ti":[0,-33.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[7.784,99.29,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[7.784,99.29,0],"to":[0,-33.333,0],"ti":[0,33.333,0]},{"t":90,"s":[7.784,-100.71,0]}],"ix":2},"a":{"a":0,"k":[225.631,140.499,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[1.091,10.526],[-8.034,1.938],[-1.091,-10.526],[8.034,-1.938]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000026226,0.319999992847,0.610000014305,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[218.951,244.775],"to":[-47.219,-5.068],"ti":[47.219,5.068]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":50,"s":[-64.365,214.365],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[-64.365,214.365],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.834},"o":{"x":0.167,"y":0},"t":89,"s":[-64.365,214.365],"to":[47.219,5.068],"ti":[-47.219,-5.068]},{"t":90,"s":[218.951,244.775]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-1996]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[-1996]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15.834,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[10.032,-3.369],[3.65,7.414],[-10.032,3.37],[-3.65,-7.414]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.769999980927,0.070000000298,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[217.823,241.687],"to":[-25.867,-35.796],"ti":[25.867,35.796]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":33,"s":[62.624,26.913],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[62.624,26.913],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.902},"o":{"x":0.167,"y":0},"t":89,"s":[62.624,26.913],"to":[25.867,35.796],"ti":[-25.867,-35.796]},{"t":90,"s":[217.823,241.687]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1909]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[1909]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10.45,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[5.439,-9.079],[7.591,3.266],[-5.438,9.079],[-7.591,-3.265]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000026226,0.319999992847,0.610000014305,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.061},"t":0,"s":[216.419,243.707],"to":[15.654,-39.661],"ti":[-15.654,39.661]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":44,"s":[310.345,5.738],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[310.345,5.738],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[310.345,5.738],"to":[-15.654,39.661],"ti":[15.654,-39.661]},{"t":90,"s":[216.419,243.707]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-1082]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":44,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[-1082]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13.934,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":44,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[10.032,-3.369],[3.649,7.414],[-10.032,3.37],[-3.65,-7.414]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000026226,0.319999992847,0.610000014305,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.161},"t":0,"s":[220.852,243.393],"to":[47.186,-13.399],"ti":[-47.186,13.399]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[503.969,162.999],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[503.969,162.999],"to":[-47.186,13.399],"ti":[47.186,-13.399]},{"t":90,"s":[220.852,243.393]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-1636]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[-1636]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17.733,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[5.635,-8.958],[7.518,3.43],[-5.635,8.958],[-7.518,-3.431]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.649999976158,0.860000014305,0.870000004768,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[216.978,239.574],"to":[-8.223,-43.41],"ti":[8.223,43.41]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":34,"s":[167.638,-20.883],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[167.638,-20.883],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.969},"o":{"x":0.167,"y":0},"t":89,"s":[167.638,-20.883],"to":[8.223,43.41],"ti":[-8.223,-43.41]},{"t":90,"s":[216.978,239.574]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[791]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[791]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10.767,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[12.714,-4.27],[4.625,9.396],[-12.714,4.27],[-4.625,-9.396]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.769999980927,0.070000000298,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.052},"t":0,"s":[216.807,247.359],"to":[14.984,-45.63],"ti":[-14.984,45.63]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":35,"s":[306.713,-26.422],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[306.713,-26.422],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[306.713,-26.422],"to":[-14.984,45.63],"ti":[14.984,-45.63]},{"t":90,"s":[216.807,247.359]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-1349]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[-1349]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11.084,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[16.462,-5.529],[5.988,12.166],[-16.462,5.529],[-5.99,-12.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.889999985695,0.910000026226,0.920000016689,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.15},"t":0,"s":[220.337,243.096],"to":[46.008,-22.901],"ti":[-46.008,22.901]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":50,"s":[496.388,105.69],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[496.388,105.69],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[496.388,105.69],"to":[-46.008,22.901],"ti":[46.008,-22.901]},{"t":90,"s":[220.337,243.096]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1085]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[1085]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15.834,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0],[0,0]],"v":[[7.21,-15.799],[12.976,3.938],[-7.209,15.799],[-12.976,-3.938]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.889999985695,0.910000026226,0.920000016689,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[216.862,239.004],"to":[47.602,-3.488],"ti":[-47.602,3.488]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":28,"s":[502.475,218.079],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[502.475,218.079],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":89,"s":[502.475,218.079],"to":[-47.602,3.488],"ti":[47.602,-3.488]},{"t":90,"s":[216.862,239.004]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[544]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[544]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.867,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[11.889,12.659],[-8.563,10.515],[-11.889,-12.659],[8.562,-10.516]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.889999985695,0.910000026226,0.920000016689,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[219.276,237.668],"to":[-0.176,-44.137],"ti":[0.176,44.137]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":42,"s":[218.221,-27.157],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[218.221,-27.157],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.999},"o":{"x":0.167,"y":0},"t":89,"s":[218.221,-27.157],"to":[0.176,44.137],"ti":[-0.176,-44.137]},{"t":90,"s":[219.276,237.668]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-1017]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":42,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[-1017]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13.301,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":42,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[11.889,12.66],[-8.562,10.516],[-11.889,-12.66],[8.562,-10.515]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.889999985695,0.910000026226,0.920000016689,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[219.081,240.186],"to":[-44.551,-41.734],"ti":[44.551,41.734]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":25,"s":[-48.224,-10.22],"to":[0,0],"ti":[0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":56,"s":[-48.224,-10.22],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.878},"o":{"x":0.167,"y":0},"t":89,"s":[-48.224,-10.22],"to":[44.551,41.734],"ti":[-44.551,-41.734]},{"t":90,"s":[219.081,240.186]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1408]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":25,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":90,"s":[1408]}],"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7.917,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":25,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"t":90,"s":[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}],"ip":0,"op":450,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":1,"nm":"White Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,398,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":800,"sh":800,"sc":"#ffffff","ip":600,"op":600,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Lottie_Main_Comp","refId":"comp_0","sr":0.5,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":45.5,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/assets/animations/confetti.json b/assets/animations/confetti.json new file mode 100644 index 0000000..cd77fa5 --- /dev/null +++ b/assets/animations/confetti.json @@ -0,0 +1 @@ +{"v":"5.5.8","fr":29.9700012207031,"ip":0,"op":300.00001221925,"w":2000,"h":2000,"nm":"Comp 1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"BlueConfetti","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":150.000006109625,"op":450.000018328876,"st":150.000006109625,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"BlueConfetti","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":0,"op":300.00001221925,"st":-150.000006109625,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"GreenConfetti","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":150.000006109625,"op":450.000018328876,"st":150.000006109625,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"GreenConfetti","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":0,"op":299.00001217852,"st":-150.000006109625,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"YellowConfetti","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":150.000006109625,"op":516.000021017111,"st":150.000006109625,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"YellowConfetti","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":0,"op":300.00001221925,"st":-149.000006068894,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"RedConfetti","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":150.000006109625,"op":750.000030548126,"st":150.000006109625,"bm":0},{"ddd":0,"ind":8,"ty":0,"nm":"RedConfetti","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":0,"op":450.000018328876,"st":-150.000006109625,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[688,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":175,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":176,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":196,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":231,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":276,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":305,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":349.000014215061,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":177,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":211,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":243,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":301,"s":[100,1]},{"t":349.000014215061,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[0]},{"t":349.000014215061,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":175.000007127896,"op":1075.00004378565,"st":175.000007127896,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1088,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":225,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":226,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":246,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":281,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":326,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":355,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":399.000016251603,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":227,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":261,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":293,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":351,"s":[100,1]},{"t":399.000016251603,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":225,"s":[0]},{"t":399.000016251603,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":225.000009164438,"op":1125.00004582219,"st":225.000009164438,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1408,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":182,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":211,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":255.000010386363,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":83,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":117,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":149,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":207,"s":[100,1]},{"t":255.000010386363,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[0]},{"t":255.000010386363,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":81.0000032991976,"op":981.000039956949,"st":81.0000032991976,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1968,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":145,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":146,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":166,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":201,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":246,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":275,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":319.000012993136,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":147,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":181,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":213,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":271,"s":[100,1]},{"t":319.000012993136,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":145,"s":[0]},{"t":319.000012993136,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":145.000005905971,"op":1045.00004256372,"st":145.000005905971,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[848,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":154,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":199,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":228,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":272.000011078787,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":100,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":134,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":166,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":224,"s":[100,1]},{"t":272.000011078787,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[0]},{"t":272.000011078787,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":98.0000039916218,"op":369.000015029678,"st":98.0000039916218,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[368,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":151,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":180,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":224.000009123707,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":52,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":86,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":118,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":176,"s":[100,1]},{"t":224.000009123707,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[0]},{"t":224.000009123707,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":50.0000020365418,"op":300.00001221925,"st":50.0000020365418,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1728,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":144,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":188.000007657397,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":16,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":82,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":140,"s":[100,1]},{"t":188.000007657397,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[0]},{"t":188.000007657397,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":14.0000005702317,"op":300.00001221925,"st":14.0000005702317,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1248,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.054901961237,0.678431391716,1,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-1,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":129,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":173.000007046434,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":1,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":67,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":125,"s":[100,1]},{"t":173.000007046434,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[0]},{"t":173.000007046434,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":-1.00000004073083,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[368,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":83,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":163,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":192,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":236.000009612477,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":64,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":98,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":130,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":188,"s":[100,1]},{"t":236.000009612477,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[0]},{"t":236.000009612477,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":62.0000025253118,"op":962.000039183063,"st":62.0000025253118,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1328,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":190,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":191,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":211,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":246,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":291,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":320,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":364.000014826024,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":192,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":226,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":258,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":316,"s":[100,1]},{"t":364.000014826024,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":190,"s":[0]},{"t":364.000014826024,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":190.000007738859,"op":1090.00004439661,"st":190.000007738859,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[848,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":125,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":126,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":146,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":181,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":226,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":255,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":299.00001217852,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":127,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":161,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":193,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":251,"s":[100,1]},{"t":299.00001217852,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0]},{"t":299.00001217852,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":125.000005091354,"op":1025.00004174911,"st":125.000005091354,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1328,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":142,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":171,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":215.00000875713,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":43,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":77,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":109,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":167,"s":[100,1]},{"t":215.00000875713,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[0]},{"t":215.00000875713,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":41.0000016699642,"op":941.000038327716,"st":41.0000016699642,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1088,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":142,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":143,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":163,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":198,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":243,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":272,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":316.000012870944,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":144,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":178,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":210,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":268,"s":[100,1]},{"t":316.000012870944,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":142,"s":[0]},{"t":316.000012870944,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":142.000005783779,"op":413.000016821835,"st":142.000005783779,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[608,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":212,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":213,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":233,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":268,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":313,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":342,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":386.000015722102,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":214,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":248,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":280,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":338,"s":[100,1]},{"t":386.000015722102,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":212,"s":[0]},{"t":386.000015722102,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":212.000008634937,"op":462.000018817646,"st":212.000008634937,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1088,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-9,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-8,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":165.000006720588,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":-7,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":27,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":59,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":117,"s":[100,1]},{"t":165.000006720588,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-9,"s":[0]},{"t":165.000006720588,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-9.00000036657752,"op":277.000011282441,"st":-9.00000036657752,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1728,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.905882358551,0.658823549747,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":138,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":167,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":211.000008594206,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":39,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":73,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":105,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":163,"s":[100,1]},{"t":211.000008594206,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0]},{"t":211.000008594206,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":38.0000015477717,"op":338.000013767022,"st":37.0000015070409,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[288,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-1,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":129,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":173.000007046434,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":1,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":67,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":125,"s":[100,1]},{"t":173.000007046434,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[0]},{"t":173.000007046434,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-1.00000004073083,"op":899.000036617021,"st":-1.00000004073083,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1424,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":160,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":161,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":181,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":216,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":290,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":334.000013604099,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":162,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":196,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":228,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":286,"s":[100,1]},{"t":334.000013604099,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":160,"s":[0]},{"t":334.000013604099,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":160.000006516934,"op":1060.00004317469,"st":160.000006516934,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[528,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":142,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":186.000007575935,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":14,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":48,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":80,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":138,"s":[100,1]},{"t":186.000007575935,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"t":186.000007575935,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12.00000048877,"op":912.000037146522,"st":12.00000048877,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1168,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":146,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":175,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":219.000008920053,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":47,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":81,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":113,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":171,"s":[100,1]},{"t":219.000008920053,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[0]},{"t":219.000008920053,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":45.0000018328876,"op":945.000038490639,"st":45.0000018328876,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[768,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":220,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":221,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":241,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":276,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":321,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":350,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":394.000016047949,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":222,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":256,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":288,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":346,"s":[100,1]},{"t":394.000016047949,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":220,"s":[0]},{"t":394.000016047949,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":220.000008960784,"op":491.00001999884,"st":220.000008960784,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2016,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-1,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":129,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":173.000007046434,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":1,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":67,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":125,"s":[100,1]},{"t":173.000007046434,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[0]},{"t":173.000007046434,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-1.00000004073083,"op":249.000010141978,"st":-1.00000004073083,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1968,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":178,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":179,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":199,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":234,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":279,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":308,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":352.000014337254,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":180,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":214,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":246,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":304,"s":[100,1]},{"t":352.000014337254,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":178,"s":[0]},{"t":352.000014337254,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":178.000007250089,"op":464.000018899107,"st":178.000007250089,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1568,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470589638,0.803921580315,0.223529413342,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":195,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":224,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":268.000010915864,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":96,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":130,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":162,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":220,"s":[100,1]},{"t":268.000010915864,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[0]},{"t":268.000010915864,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":95.0000038694293,"op":395.00001608868,"st":94.0000038286985,"bm":0}]},{"id":"comp_4","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1568,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":169,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":170,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":190,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":225,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":270,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":299,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":343.000013970676,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":171,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":205,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":237,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":295,"s":[100,1]},{"t":343.000013970676,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":169,"s":[0]},{"t":343.000013970676,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":169.000006883511,"op":1069.00004354126,"st":169.000006883511,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1104,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":168,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":197,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":241.000009816131,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":69,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":103,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":135,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":193,"s":[100,1]},{"t":241.000009816131,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[0]},{"t":241.000009816131,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":67.0000027289659,"op":967.000039386717,"st":67.0000027289659,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[928,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":232,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":233,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":253,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":288,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":333,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":362,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":406.000016536719,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":234,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":268,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":300,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":358,"s":[100,1]},{"t":406.000016536719,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":232,"s":[0]},{"t":406.000016536719,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":232.000009449554,"op":1132.00004610731,"st":232.000009449554,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1968,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":133,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":168,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":213,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":242,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":286.000011649019,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":114,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":148,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":180,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":238,"s":[100,1]},{"t":286.000011649019,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[0]},{"t":286.000011649019,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":112.000004561854,"op":1012.0000412196,"st":112.000004561854,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1248,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":328,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":329,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":349,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":384,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":429,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":458,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":502.000020446879,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":330,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":364,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":396,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":454,"s":[100,1]},{"t":502.000020446879,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":328,"s":[0]},{"t":502.000020446879,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":328.000013359714,"op":599.00002439777,"st":328.000013359714,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2016,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":259,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":260,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":280,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":315,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":360,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":389,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":433.000017636452,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":261,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":295,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":327,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":385,"s":[100,1]},{"t":433.000017636452,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":259,"s":[0]},{"t":433.000017636452,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":259.000010549286,"op":509.000020731995,"st":259.000010549286,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[608,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":130,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":174.000007087165,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":2,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":36,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":126,"s":[100,1]},{"t":174.000007087165,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":174.000007087165,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":286.000011649019,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1808,732,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[32,32],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.298039227724,0.360784322023,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[-256,-748],"to":[0,4.316],"ti":[0.521,-4.829]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[-256.803,-794.275],"to":[-6.566,60.819],"ti":[0,-108.389]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[-308,-464.77],"to":[0,131.094],"ti":[-6.457,-163.134]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[-227.949,-12.545],"to":[7.89,199.325],"ti":[9.338,-174.954]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":156,"s":[-297.153,568.725],"to":[-8.732,163.591],"ti":[0,-75.105]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":185,"s":[-256,943],"to":[0,279.833],"ti":[0,-0.667]},{"t":229.000009327361,"s":[-168,1299]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":57,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":91,"s":[100,1]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":123,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":181,"s":[100,1]},{"t":229.000009327361,"s":[100,100]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[0]},{"t":229.000009327361,"s":[277.579]}],"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":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":56.0000022809268,"op":356.000014500177,"st":55.0000022401959,"bm":0}]}],"layers":[{"ddd":0,"ind":2,"ty":0,"nm":"SmallConfetti","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1000,1000,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":0,"op":300.00001221925,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"SmallConfetti","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[592,592,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[146.4,143.2,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":0,"op":300.00001221925,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"SmallConfetti","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1400,1360,0],"ix":2},"a":{"a":0,"k":[1000,1000,0],"ix":1},"s":{"a":0,"k":[153.6,143.2,100],"ix":6}},"ao":0,"w":2000,"h":2000,"ip":0,"op":300.00001221925,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/assets/animations/lights_purple.json b/assets/animations/lights_purple.json new file mode 100644 index 0000000..d861a81 --- /dev/null +++ b/assets/animations/lights_purple.json @@ -0,0 +1,9268 @@ +{ + "nm": "Yboo-light-efffect", + "mn": "", + "layers": [ + { + "ty": 4, + "nm": "star 20", + "mn": "", + "sr": 1, + "st": 132, + "op": 732, + "ip": 132, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 132 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 12.062, + 12.062, + 100 + ], + "t": 222 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 132, + "ti": [ + 32.667, + -31.833, + 0 + ], + "to": [ + -32.667, + 31.833, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 60, + 447, + 0 + ], + "t": 222 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 132 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 360 + ], + "t": 222 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 132 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 162 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 222 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "star 19", + "mn": "", + "sr": 1, + "st": 147, + "op": 747, + "ip": 147, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 147 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 17.062, + 17.062, + 100 + ], + "t": 237 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 147, + "ti": [ + -29.333, + -29, + 0 + ], + "to": [ + 29.333, + 29, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 432, + 430, + 0 + ], + "t": 237 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 147 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 237 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 147 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 177 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 237 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 2 + }, + { + "ty": 4, + "nm": "star 18", + "mn": "", + "sr": 1, + "st": 162, + "op": 762, + "ip": 162, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 162 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5.062, + 5.062, + 100 + ], + "t": 222 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 162, + "ti": [ + -29, + 27.5, + 0 + ], + "to": [ + 29, + -27.5, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 430, + 91, + 0 + ], + "t": 222 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 162 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 222 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 162 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 192 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 222 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3 + }, + { + "ty": 4, + "nm": "star 17", + "mn": "", + "sr": 1, + "st": 180, + "op": 780, + "ip": 180, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 180 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 13.062, + 13.062, + 100 + ], + "t": 270 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 180, + "ti": [ + 7.333, + 30.667, + 0 + ], + "to": [ + -7.333, + -30.667, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 212, + 72, + 0 + ], + "t": 270 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 14 + ], + "t": 180 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 270 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 180 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 210 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 270 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4 + }, + { + "ty": 4, + "nm": "star 16", + "mn": "", + "sr": 1, + "st": 140, + "op": 740, + "ip": 140, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 140 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 7.063, + 7.063, + 100 + ], + "t": 230 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 140, + "ti": [ + 32.333, + 15, + 0 + ], + "to": [ + -32.333, + -15, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 62, + 166, + 0 + ], + "t": 230 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 140 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 230 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 231 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 140 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 170 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 230 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 5 + }, + { + "ty": 4, + "nm": "star 15", + "mn": "", + "sr": 1, + "st": 164, + "op": 764, + "ip": 164, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 164 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 12.062, + 12.062, + 100 + ], + "t": 239 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 164, + "ti": [ + 31.167, + -8.667, + 0 + ], + "to": [ + -31.167, + 8.667, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 69, + 308, + 0 + ], + "t": 239 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 164 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 364 + ], + "t": 239 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 240 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 164 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 194 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 239 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 6 + }, + { + "ty": 4, + "nm": "star 14", + "mn": "", + "sr": 1, + "st": 175, + "op": 775, + "ip": 175, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 175 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 12.062, + 12.062, + 100 + ], + "t": 265 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 175, + "ti": [ + -11, + -30.333, + 0 + ], + "to": [ + 11, + 30.333, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 322, + 438, + 0 + ], + "t": 265 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 175 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 453 + ], + "t": 265 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 266 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 175 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 205 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 265 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 7 + }, + { + "ty": 4, + "nm": "star 13", + "mn": "", + "sr": 1, + "st": 190, + "op": 790, + "ip": 190, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 190 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5.062, + 5.062, + 100 + ], + "t": 280 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 190, + "ti": [ + -34.667, + -15.667, + 0 + ], + "to": [ + 34.667, + 15.667, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 464, + 350, + 0 + ], + "t": 280 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 190 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 453 + ], + "t": 280 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 281 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 190 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 220 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 280 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 8 + }, + { + "ty": 4, + "nm": "star 12", + "mn": "", + "sr": 1, + "st": 198, + "op": 798, + "ip": 198, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 198 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 13.062, + 13.062, + 100 + ], + "t": 288 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 198, + "ti": [ + -26.667, + 2.833, + 0 + ], + "to": [ + 26.667, + -2.833, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 416, + 239, + 0 + ], + "t": 288 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 198 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 394 + ], + "t": 288 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 289 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 198 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 228 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 288 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 9 + }, + { + "ty": 4, + "nm": "star 11", + "mn": "", + "sr": 1, + "st": 151, + "op": 751, + "ip": 151, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 151 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 13.062, + 13.062, + 100 + ], + "t": 271 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 151, + "ti": [ + -16.333, + 28.333, + 0 + ], + "to": [ + 16.333, + -28.333, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 354, + 86, + 0 + ], + "t": 271 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 151 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 381 + ], + "t": 271 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 272 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 151 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 181 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 271 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 10 + }, + { + "ty": 4, + "nm": "star 10", + "mn": "", + "sr": 1, + "st": 19, + "op": 619, + "ip": 19, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 19 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 13.062, + 13.062, + 100 + ], + "t": 139 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 19, + "ti": [ + -16.333, + 28.333, + 0 + ], + "to": [ + 16.333, + -28.333, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 354, + 86, + 0 + ], + "t": 139 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 19 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 381 + ], + "t": 139 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 140 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 19 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 49 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 139 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 11 + }, + { + "ty": 4, + "nm": "star 9", + "mn": "", + "sr": 1, + "st": 66, + "op": 666, + "ip": 66, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 66 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 13.062, + 13.062, + 100 + ], + "t": 156 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 66, + "ti": [ + -26.667, + 2.833, + 0 + ], + "to": [ + 26.667, + -2.833, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 416, + 239, + 0 + ], + "t": 156 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 66 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 394 + ], + "t": 156 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 157 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 66 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 96 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 156 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 12 + }, + { + "ty": 4, + "nm": "star 8", + "mn": "", + "sr": 1, + "st": 58, + "op": 658, + "ip": 58, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 58 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5.062, + 5.062, + 100 + ], + "t": 148 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 58, + "ti": [ + -34.667, + -15.667, + 0 + ], + "to": [ + 34.667, + 15.667, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 464, + 350, + 0 + ], + "t": 148 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 58 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 453 + ], + "t": 148 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 149 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 58 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 88 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 148 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 13 + }, + { + "ty": 4, + "nm": "star 7", + "mn": "", + "sr": 1, + "st": 43, + "op": 643, + "ip": 43, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 43 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 12.062, + 12.062, + 100 + ], + "t": 133 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 43, + "ti": [ + -11, + -30.333, + 0 + ], + "to": [ + 11, + 30.333, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 322, + 438, + 0 + ], + "t": 133 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 43 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 453 + ], + "t": 133 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 134 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 43 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 73 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 133 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 14 + }, + { + "ty": 4, + "nm": "star 6", + "mn": "", + "sr": 1, + "st": 32, + "op": 632, + "ip": 32, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 32 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 12.062, + 12.062, + 100 + ], + "t": 107 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 32, + "ti": [ + 31.167, + -8.667, + 0 + ], + "to": [ + -31.167, + 8.667, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 69, + 308, + 0 + ], + "t": 107 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 32 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 364 + ], + "t": 107 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 108 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 32 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 62 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 107 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 15 + }, + { + "ty": 4, + "nm": "star 5", + "mn": "", + "sr": 1, + "st": 8, + "op": 608, + "ip": 8, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 8 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 7.063, + 7.063, + 100 + ], + "t": 98 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 8, + "ti": [ + 32.333, + 15, + 0 + ], + "to": [ + -32.333, + -15, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 62, + 166, + 0 + ], + "t": 98 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 8 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 98 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 39 + ], + "t": 99 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 8 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 38 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 98 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 16 + }, + { + "ty": 4, + "nm": "star 4", + "mn": "", + "sr": 1, + "st": 48, + "op": 648, + "ip": 48, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 48 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 13.062, + 13.062, + 100 + ], + "t": 138 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 48, + "ti": [ + 7.333, + 30.667, + 0 + ], + "to": [ + -7.333, + -30.667, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 212, + 72, + 0 + ], + "t": 138 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 14 + ], + "t": 48 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 138 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 48 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 78 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 138 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 17 + }, + { + "ty": 4, + "nm": "star 3", + "mn": "", + "sr": 1, + "st": 30, + "op": 630, + "ip": 30, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 30 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 5.062, + 5.062, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 30, + "ti": [ + -29, + 27.5, + 0 + ], + "to": [ + 29, + -27.5, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 430, + 91, + 0 + ], + "t": 90 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 30 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 90 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 30 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 60 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 90 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 18 + }, + { + "ty": 4, + "nm": "star 2", + "mn": "", + "sr": 1, + "st": 15, + "op": 615, + "ip": 15, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 15 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 17.062, + 17.062, + 100 + ], + "t": 105 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 15, + "ti": [ + -29.333, + -29, + 0 + ], + "to": [ + 29.333, + 29, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 432, + 430, + 0 + ], + "t": 105 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 15 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 405 + ], + "t": 105 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 15 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 45 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 105 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 19 + }, + { + "ty": 4, + "nm": "star", + "mn": "", + "sr": 1, + "st": 0, + "op": 600, + "ip": 0, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 8.062, + 8.062, + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 12.062, + 12.062, + 100 + ], + "t": 90 + } + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 256, + 256, + 0 + ], + "t": 0, + "ti": [ + 32.667, + -31.833, + 0 + ], + "to": [ + -32.667, + 31.833, + 0 + ] + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 60, + 447, + 0 + ], + "t": 90 + } + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 360 + ], + "t": 90 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 90 + ], + "t": 30 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 90 + } + ], + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Группа 1", + "ix": 1, + "cix": 2, + "np": 2, + "it": [ + { + "ty": "sh", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Group", + "nm": "Контур 1", + "ix": 1, + "d": 1, + "ks": { + "a": 0, + "k": { + "c": true, + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + -218.474 + ], + [ + 68.793, + -71.453 + ], + [ + 229.82, + -51.589 + ], + [ + 111.219, + 59.174 + ], + [ + 142.068, + 218.474 + ], + [ + 0, + 139.917 + ], + [ + -142.068, + 218.474 + ], + [ + -111.206, + 59.174 + ], + [ + -229.82, + -51.589 + ], + [ + -68.78, + -71.453 + ] + ] + }, + "ix": 2 + } + }, + { + "ty": "fl", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Заливка 1", + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 4 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 5 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 255.85, + 255.969 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 20 + }, + { + "ty": 4, + "nm": "Shape Layer 1", + "mn": "", + "sr": 1, + "st": 0, + "op": 600, + "ip": 0, + "hd": false, + "cl": "", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 29.103, + 48.103, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "s": { + "a": 0, + "k": [ + 310.206, + 310.206 + ], + "ix": 2 + } + }, + { + "ty": "st", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0, + "ix": 5 + }, + "d": [], + "c": { + "a": 0, + "k": [ + 0.5294, + 0.749, + 1 + ], + "ix": 3 + } + }, + { + "ty": "gf", + "bm": 0, + "cl": "", + "ln": "", + "hd": false, + "mn": "ADBE Vector Graphic - G-Fill", + "nm": "Gradient Fill 2", + "e": { + "a": 0, + "k": [ + 155.083, + 1.754 + ], + "ix": 6 + }, + "g": { + "p": 3, + "k": { + "a": 0, + "k": [ + 0, + 1.0, + 0.8, + 0.95, + 0.5, + 1.0, + 0.85, + 0.97, + 1, + 1.0, + 0.92, + 0.98, + 0, + 1, + 0.5, + 0.5, + 1, + 0 + ], + "ix": 9 + } + }, + "t": 2, + "a": { + "a": 0, + "k": 0, + "ix": 8 + }, + "h": { + "a": 0, + "k": 0, + "ix": 7 + }, + "s": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 5 + }, + "r": 1, + "o": { + "a": 0, + "k": 100, + "ix": 10 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 29.103, + 48.103 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 21 + }, + { + "ty": 2, + "nm": "light/light-def.ai", + "mn": "", + "sr": 1, + "st": 0, + "op": 600, + "ip": 0, + "hd": false, + "cl": "ai", + "ln": "", + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 82.031, + 82.031, + 100 + ], + "ix": 6 + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 256, + 256, + 0 + ], + "ix": 2 + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 360 + ], + "t": 300 + } + ], + "ix": 10 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100, + "ix": 11 + } + }, + "ef": [], + "refId": "image_0", + "ind": 22 + } + ], + "ddd": 0, + "h": 512, + "w": 512, + "meta": { + "a": "", + "k": "", + "d": "", + "g": "LottieFiles AE ", + "tc": "#000000" + }, + "v": "4.8.0", + "fr": 60, + "op": 301, + "ip": 0, + "assets": [ + { + "id": "image_0", + "u": "", + "e": 1, + "w": 512, + "h": 512, + "p": "data:image/png;base64,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" + } + ] +} \ No newline at end of file diff --git a/assets/audios/back.mp3 b/assets/audios/back.mp3 new file mode 100644 index 0000000..b2a877a Binary files /dev/null and b/assets/audios/back.mp3 differ diff --git a/assets/audios/click_button.mp3 b/assets/audios/click_button.mp3 new file mode 100644 index 0000000..ea977e9 Binary files /dev/null and b/assets/audios/click_button.mp3 differ diff --git a/assets/audios/diamond_end.mp3 b/assets/audios/diamond_end.mp3 new file mode 100644 index 0000000..5938bb7 Binary files /dev/null and b/assets/audios/diamond_end.mp3 differ diff --git a/assets/audios/diamond_increase.mp3 b/assets/audios/diamond_increase.mp3 new file mode 100644 index 0000000..831a8ec Binary files /dev/null and b/assets/audios/diamond_increase.mp3 differ diff --git a/assets/audios/home.mp3 b/assets/audios/home.mp3 new file mode 100644 index 0000000..637448f Binary files /dev/null and b/assets/audios/home.mp3 differ diff --git a/assets/audios/incorrect_answer.mp3 b/assets/audios/incorrect_answer.mp3 new file mode 100644 index 0000000..17eabf6 Binary files /dev/null and b/assets/audios/incorrect_answer.mp3 differ diff --git a/assets/audios/question.mp3 b/assets/audios/question.mp3 new file mode 100644 index 0000000..495f6c1 Binary files /dev/null and b/assets/audios/question.mp3 differ diff --git a/assets/audios/right_answer.mp3 b/assets/audios/right_answer.mp3 new file mode 100644 index 0000000..de51d68 Binary files /dev/null and b/assets/audios/right_answer.mp3 differ diff --git a/assets/fonts/Baloo2-Bold.ttf b/assets/fonts/Baloo2-Bold.ttf new file mode 100644 index 0000000..c2f6f69 Binary files /dev/null and b/assets/fonts/Baloo2-Bold.ttf differ diff --git a/assets/fonts/Baloo2-ExtraBold.ttf b/assets/fonts/Baloo2-ExtraBold.ttf new file mode 100644 index 0000000..58286dd Binary files /dev/null and b/assets/fonts/Baloo2-ExtraBold.ttf differ diff --git a/assets/fonts/Baloo2-Medium.ttf b/assets/fonts/Baloo2-Medium.ttf new file mode 100644 index 0000000..32cf92d Binary files /dev/null and b/assets/fonts/Baloo2-Medium.ttf differ diff --git a/assets/fonts/Baloo2-SemiBold.ttf b/assets/fonts/Baloo2-SemiBold.ttf new file mode 100644 index 0000000..eb39dd1 Binary files /dev/null and b/assets/fonts/Baloo2-SemiBold.ttf differ diff --git a/assets/fonts/DinoKids-Regular.ttf b/assets/fonts/DinoKids-Regular.ttf new file mode 100644 index 0000000..968f36d Binary files /dev/null and b/assets/fonts/DinoKids-Regular.ttf differ diff --git a/assets/fonts/Marhey-Bold.ttf b/assets/fonts/Marhey-Bold.ttf new file mode 100644 index 0000000..eb375d3 Binary files /dev/null and b/assets/fonts/Marhey-Bold.ttf differ diff --git a/assets/fonts/Marhey-SemiBold.ttf b/assets/fonts/Marhey-SemiBold.ttf new file mode 100644 index 0000000..00ac38b Binary files /dev/null and b/assets/fonts/Marhey-SemiBold.ttf differ diff --git a/assets/images/background_home.png b/assets/images/background_home.png new file mode 100644 index 0000000..9c464bc Binary files /dev/null and b/assets/images/background_home.png differ diff --git a/assets/images/behind_diamond.png b/assets/images/behind_diamond.png new file mode 100644 index 0000000..96f2091 Binary files /dev/null and b/assets/images/behind_diamond.png differ diff --git a/assets/images/current_level.png b/assets/images/current_level.png new file mode 100644 index 0000000..ac3cbcd Binary files /dev/null and b/assets/images/current_level.png differ diff --git a/assets/images/diamond.png b/assets/images/diamond.png new file mode 100644 index 0000000..ba816b1 Binary files /dev/null and b/assets/images/diamond.png differ diff --git a/assets/images/diamond_big.png b/assets/images/diamond_big.png new file mode 100644 index 0000000..5549a10 Binary files /dev/null and b/assets/images/diamond_big.png differ diff --git a/assets/images/error.png b/assets/images/error.png new file mode 100644 index 0000000..f2002f4 Binary files /dev/null and b/assets/images/error.png differ diff --git a/assets/images/finished_level.png b/assets/images/finished_level.png new file mode 100644 index 0000000..89cb246 Binary files /dev/null and b/assets/images/finished_level.png differ diff --git a/assets/images/hadi_hoda.png b/assets/images/hadi_hoda.png new file mode 100644 index 0000000..62a40ae Binary files /dev/null and b/assets/images/hadi_hoda.png differ diff --git a/assets/images/intro_1.jpg b/assets/images/intro_1.jpg new file mode 100644 index 0000000..2737fcf Binary files /dev/null and b/assets/images/intro_1.jpg differ diff --git a/assets/images/intro_2.jpg b/assets/images/intro_2.jpg new file mode 100644 index 0000000..d5d4f9c Binary files /dev/null and b/assets/images/intro_2.jpg differ diff --git a/assets/images/intro_3.jpg b/assets/images/intro_3.jpg new file mode 100644 index 0000000..83afd24 Binary files /dev/null and b/assets/images/intro_3.jpg differ diff --git a/assets/images/intro_4.jpg b/assets/images/intro_4.jpg new file mode 100644 index 0000000..9b7795c Binary files /dev/null and b/assets/images/intro_4.jpg differ diff --git a/assets/images/intro_5.jpg b/assets/images/intro_5.jpg new file mode 100644 index 0000000..62209ed Binary files /dev/null and b/assets/images/intro_5.jpg differ diff --git a/assets/images/khadije_logo.png b/assets/images/khadije_logo.png new file mode 100644 index 0000000..3377d3f Binary files /dev/null and b/assets/images/khadije_logo.png differ diff --git a/assets/images/leaf.png b/assets/images/leaf.png new file mode 100644 index 0000000..d78212f Binary files /dev/null and b/assets/images/leaf.png differ diff --git a/assets/images/level.png b/assets/images/level.png new file mode 100644 index 0000000..f6a88ec Binary files /dev/null and b/assets/images/level.png differ diff --git a/assets/images/loading.png b/assets/images/loading.png new file mode 100644 index 0000000..cf91972 Binary files /dev/null and b/assets/images/loading.png differ diff --git a/assets/images/map_background.png b/assets/images/map_background.png new file mode 100644 index 0000000..31aaf29 Binary files /dev/null and b/assets/images/map_background.png differ diff --git a/assets/images/pattern.png b/assets/images/pattern.png new file mode 100644 index 0000000..3cc6062 Binary files /dev/null and b/assets/images/pattern.png differ diff --git a/assets/images/planet_1.png b/assets/images/planet_1.png new file mode 100644 index 0000000..640194f Binary files /dev/null and b/assets/images/planet_1.png differ diff --git a/assets/images/planet_10.png b/assets/images/planet_10.png new file mode 100644 index 0000000..1fa1a68 Binary files /dev/null and b/assets/images/planet_10.png differ diff --git a/assets/images/planet_2.png b/assets/images/planet_2.png new file mode 100644 index 0000000..8081d99 Binary files /dev/null and b/assets/images/planet_2.png differ diff --git a/assets/images/planet_3.png b/assets/images/planet_3.png new file mode 100644 index 0000000..6a01dd5 Binary files /dev/null and b/assets/images/planet_3.png differ diff --git a/assets/images/planet_4.png b/assets/images/planet_4.png new file mode 100644 index 0000000..b5dfb04 Binary files /dev/null and b/assets/images/planet_4.png differ diff --git a/assets/images/planet_5.png b/assets/images/planet_5.png new file mode 100644 index 0000000..6dbb435 Binary files /dev/null and b/assets/images/planet_5.png differ diff --git a/assets/images/planet_6.png b/assets/images/planet_6.png new file mode 100644 index 0000000..c6c6130 Binary files /dev/null and b/assets/images/planet_6.png differ diff --git a/assets/images/planet_7.png b/assets/images/planet_7.png new file mode 100644 index 0000000..dfca92e Binary files /dev/null and b/assets/images/planet_7.png differ diff --git a/assets/images/planet_8.png b/assets/images/planet_8.png new file mode 100644 index 0000000..ba311cd Binary files /dev/null and b/assets/images/planet_8.png differ diff --git a/assets/images/planet_9.png b/assets/images/planet_9.png new file mode 100644 index 0000000..42f2e35 Binary files /dev/null and b/assets/images/planet_9.png differ diff --git a/assets/images/planet_final.png b/assets/images/planet_final.png new file mode 100644 index 0000000..4a71f0b Binary files /dev/null and b/assets/images/planet_final.png differ diff --git a/assets/images/satellite.png b/assets/images/satellite.png new file mode 100644 index 0000000..25bd9e4 Binary files /dev/null and b/assets/images/satellite.png differ diff --git a/assets/images/ship.png b/assets/images/ship.png new file mode 100644 index 0000000..cfadb1a Binary files /dev/null and b/assets/images/ship.png differ diff --git a/assets/svg/button.svg b/assets/svg/button.svg new file mode 100644 index 0000000..bc05b38 --- /dev/null +++ b/assets/svg/button.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/button_2.svg b/assets/svg/button_2.svg new file mode 100644 index 0000000..c27135a --- /dev/null +++ b/assets/svg/button_2.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/button_2_tablet.svg b/assets/svg/button_2_tablet.svg new file mode 100644 index 0000000..243392e --- /dev/null +++ b/assets/svg/button_2_tablet.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/button_3.svg b/assets/svg/button_3.svg new file mode 100644 index 0000000..81bec97 --- /dev/null +++ b/assets/svg/button_3.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/button_3_tablet.svg b/assets/svg/button_3_tablet.svg new file mode 100644 index 0000000..2b04573 --- /dev/null +++ b/assets/svg/button_3_tablet.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/svg/button_tablet.svg b/assets/svg/button_tablet.svg new file mode 100644 index 0000000..4a7184a --- /dev/null +++ b/assets/svg/button_tablet.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/close_btn.svg b/assets/svg/close_btn.svg new file mode 100644 index 0000000..c854f7b --- /dev/null +++ b/assets/svg/close_btn.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/correct.svg b/assets/svg/correct.svg new file mode 100644 index 0000000..17b0900 --- /dev/null +++ b/assets/svg/correct.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/svg/diamond_container.svg b/assets/svg/diamond_container.svg new file mode 100644 index 0000000..ef874cf --- /dev/null +++ b/assets/svg/diamond_container.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/done.svg b/assets/svg/done.svg new file mode 100644 index 0000000..28d7f58 --- /dev/null +++ b/assets/svg/done.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/done_rounded.svg b/assets/svg/done_rounded.svg new file mode 100644 index 0000000..941246e --- /dev/null +++ b/assets/svg/done_rounded.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/facebook.svg b/assets/svg/facebook.svg new file mode 100644 index 0000000..643a7b8 --- /dev/null +++ b/assets/svg/facebook.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/globe.svg b/assets/svg/globe.svg new file mode 100644 index 0000000..ed91021 --- /dev/null +++ b/assets/svg/globe.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/hand_point.svg b/assets/svg/hand_point.svg new file mode 100644 index 0000000..5c28ef9 --- /dev/null +++ b/assets/svg/hand_point.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/home.svg b/assets/svg/home.svg new file mode 100644 index 0000000..d9d0a2c --- /dev/null +++ b/assets/svg/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/home_button.svg b/assets/svg/home_button.svg new file mode 100644 index 0000000..5b293a6 --- /dev/null +++ b/assets/svg/home_button.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/icon_notif.svg b/assets/svg/icon_notif.svg new file mode 100644 index 0000000..4dd9648 --- /dev/null +++ b/assets/svg/icon_notif.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/icon_play.svg b/assets/svg/icon_play.svg new file mode 100644 index 0000000..8058889 --- /dev/null +++ b/assets/svg/icon_play.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/instagram.svg b/assets/svg/instagram.svg new file mode 100644 index 0000000..479e5c0 --- /dev/null +++ b/assets/svg/instagram.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/lang.svg b/assets/svg/lang.svg new file mode 100644 index 0000000..c2452a0 --- /dev/null +++ b/assets/svg/lang.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/language.svg b/assets/svg/language.svg new file mode 100644 index 0000000..807ba35 --- /dev/null +++ b/assets/svg/language.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/location.svg b/assets/svg/location.svg new file mode 100644 index 0000000..09f09b4 --- /dev/null +++ b/assets/svg/location.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/svg/music.svg b/assets/svg/music.svg new file mode 100644 index 0000000..03eb33b --- /dev/null +++ b/assets/svg/music.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/music_off.svg b/assets/svg/music_off.svg new file mode 100644 index 0000000..a8f7e90 --- /dev/null +++ b/assets/svg/music_off.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/music_on.svg b/assets/svg/music_on.svg new file mode 100644 index 0000000..3beefd9 --- /dev/null +++ b/assets/svg/music_on.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/new_horizon.svg b/assets/svg/new_horizon.svg new file mode 100644 index 0000000..c757060 --- /dev/null +++ b/assets/svg/new_horizon.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/theme.svg b/assets/svg/theme.svg new file mode 100644 index 0000000..dc27d27 --- /dev/null +++ b/assets/svg/theme.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/unmusic.svg b/assets/svg/unmusic.svg new file mode 100644 index 0000000..fca9700 --- /dev/null +++ b/assets/svg/unmusic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/whatsapp.svg b/assets/svg/whatsapp.svg new file mode 100644 index 0000000..2ca91fd --- /dev/null +++ b/assets/svg/whatsapp.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/wrong.svg b/assets/svg/wrong.svg new file mode 100644 index 0000000..ebf05ff --- /dev/null +++ b/assets/svg/wrong.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/svg/youtube.svg b/assets/svg/youtube.svg new file mode 100644 index 0000000..cbacbfd --- /dev/null +++ b/assets/svg/youtube.svg @@ -0,0 +1,4 @@ + + + + diff --git a/devtools_options.yaml b/devtools_options.yaml deleted file mode 100644 index fa0b357..0000000 --- a/devtools_options.yaml +++ /dev/null @@ -1,3 +0,0 @@ -description: This file stores settings for Dart & Flutter DevTools. -documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states -extensions: diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..edf03be --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,56 @@ +PODS: + - audio_session (0.0.1): + - Flutter + - Flutter (1.0.0) + - flutter_archive (0.0.1): + - Flutter + - ZIPFoundation (= 0.9.19) + - just_audio (0.0.1): + - Flutter + - FlutterMacOS + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - ZIPFoundation (0.9.19) + +DEPENDENCIES: + - audio_session (from `.symlinks/plugins/audio_session/ios`) + - Flutter (from `Flutter`) + - flutter_archive (from `.symlinks/plugins/flutter_archive/ios`) + - just_audio (from `.symlinks/plugins/just_audio/darwin`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + +SPEC REPOS: + trunk: + - ZIPFoundation + +EXTERNAL SOURCES: + audio_session: + :path: ".symlinks/plugins/audio_session/ios" + Flutter: + :path: Flutter + flutter_archive: + :path: ".symlinks/plugins/flutter_archive/ios" + just_audio: + :path: ".symlinks/plugins/just_audio/darwin" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + +SPEC CHECKSUMS: + audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0 + Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 + flutter_archive: ad8edfd7f7d1bb12058d05424ba93e27d9930efe + just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c + +PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e + +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index d890e71..d26d09a 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,6 +8,8 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 158B8A5FD29912CFF26B9BAF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 759C89AD6DE798E4CD028D76 /* Pods_Runner.framework */; }; + 3242934F0E5B8F9D949611E7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E33771D1E1C67D11ACD90449 /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; @@ -45,8 +47,11 @@ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 486D21D7553AB69C66B986D1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 555268DCB20A8E981AFD250D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 759C89AD6DE798E4CD028D76 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -55,13 +60,27 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B3B93BC43787CB447E97A7BB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BB05554357F24EDF51C7FB42 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D74449D88C801D925B26DCCA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + E33771D1E1C67D11ACD90449 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FB26FFAEED921E23EC33DE08 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 88FCBE2C571EC48F87C0DFDD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3242934F0E5B8F9D949611E7 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 158B8A5FD29912CFF26B9BAF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,20 @@ path = RunnerTests; sourceTree = ""; }; + 3D81C34DC4CF3A92FFCE5CF9 /* Pods */ = { + isa = PBXGroup; + children = ( + 486D21D7553AB69C66B986D1 /* Pods-Runner.debug.xcconfig */, + FB26FFAEED921E23EC33DE08 /* Pods-Runner.release.xcconfig */, + 555268DCB20A8E981AFD250D /* Pods-Runner.profile.xcconfig */, + D74449D88C801D925B26DCCA /* Pods-RunnerTests.debug.xcconfig */, + BB05554357F24EDF51C7FB42 /* Pods-RunnerTests.release.xcconfig */, + B3B93BC43787CB447E97A7BB /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +127,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 3D81C34DC4CF3A92FFCE5CF9 /* Pods */, + FC96BC5E247D6FFBB9FA6BDC /* Frameworks */, ); sourceTree = ""; }; @@ -121,6 +156,15 @@ path = Runner; sourceTree = ""; }; + FC96BC5E247D6FFBB9FA6BDC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 759C89AD6DE798E4CD028D76 /* Pods_Runner.framework */, + E33771D1E1C67D11ACD90449 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + 93896C744A5765E2E923D2A2 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 88FCBE2C571EC48F87C0DFDD /* Frameworks */, ); buildRules = ( ); @@ -145,12 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 50232B51F020C768F6632825 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 6C6DBE7A71B85EC7354A578A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -238,6 +286,67 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 50232B51F020C768F6632825 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 6C6DBE7A71B85EC7354A578A /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 93896C744A5765E2E923D2A2 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -378,6 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D74449D88C801D925B26DCCA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = BB05554357F24EDF51C7FB42 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = B3B93BC43787CB447E97A7BB /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png new file mode 100644 index 0000000..14f5ca1 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png new file mode 100644 index 0000000..14f5ca1 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png new file mode 100644 index 0000000..6841749 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png new file mode 100644 index 0000000..4f4baea Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png new file mode 100644 index 0000000..2e5e48c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png new file mode 100644 index 0000000..07da097 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png new file mode 100644 index 0000000..07da097 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png new file mode 100644 index 0000000..0d9ceff Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png new file mode 100644 index 0000000..2e5e48c Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png new file mode 100644 index 0000000..d43c3f8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png new file mode 100644 index 0000000..d43c3f8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png new file mode 100644 index 0000000..5f96f34 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png new file mode 100644 index 0000000..14f5ca1 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png new file mode 100644 index 0000000..5f96f34 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png new file mode 100644 index 0000000..8c29190 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png new file mode 100644 index 0000000..e1165d5 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png new file mode 100644 index 0000000..5f96f34 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png new file mode 100644 index 0000000..63c21bb Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png new file mode 100644 index 0000000..8c29190 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png new file mode 100644 index 0000000..2b28c8b Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png new file mode 100644 index 0000000..ad6bf88 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..bd04914 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1,134 @@ { - "images" : [ + "images": [ { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "AppIcon@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" + "filename": "AppIcon@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "AppIcon~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "AppIcon@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" + "filename": "AppIcon-83.5@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "AppIcon-40@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "filename": "AppIcon-40@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" + "filename": "AppIcon-40~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "filename": "AppIcon-40@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" + "filename": "AppIcon-20@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "AppIcon-20@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "AppIcon-20~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "AppIcon-20@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" + "filename": "AppIcon-29.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "AppIcon-29@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" + "filename": "AppIcon-29@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "filename": "AppIcon-29~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" + "filename": "AppIcon-29@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" + "filename": "AppIcon-60@2x~car.png", + "idiom": "car", + "scale": "2x", + "size": "60x60" + }, + { + "filename": "AppIcon-60@3x~car.png", + "idiom": "car", + "scale": "3x", + "size": "60x60" + }, + { + "filename": "AppIcon~ios-marketing.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "author": "iconkitchen", + "version": 1 } -} +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 7353c41..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 797d452..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 6ed2d93..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cd7b00..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index fe73094..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index 321773c..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 797d452..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 502f463..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 0ec3034..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 0ec3034..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index e9f5fea..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 84ac32a..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 8953cba..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 0467bf1..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index ab9f6ea..4d55364 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Hadi Hoda Flutter + Hadi & Hoda CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/lib/common_ui/resources/my_animations.dart b/lib/common_ui/resources/my_animations.dart new file mode 100644 index 0000000..5739d3d --- /dev/null +++ b/lib/common_ui/resources/my_animations.dart @@ -0,0 +1,8 @@ +class MyAnimations { + static const MyAnimations _i = MyAnimations._internal(); + const MyAnimations._internal(); + factory MyAnimations() => _i; + + static const String confetti = 'assets/animations/confetti.json'; + static const String lightPurple = 'assets/animations/lights_purple.json'; +} \ No newline at end of file diff --git a/lib/common_ui/resources/my_assets.dart b/lib/common_ui/resources/my_assets.dart index b9e70da..2153575 100644 --- a/lib/common_ui/resources/my_assets.dart +++ b/lib/common_ui/resources/my_assets.dart @@ -3,5 +3,105 @@ class MyAssets { const MyAssets._internal(); factory MyAssets() => _i; - static const String sample = 'assets/image/sample.png'; + /// PNG, JPG + static const String backgroundHome = 'assets/images/background_home.png'; + static const String hadiHoda = 'assets/images/hadi_hoda.png'; + static const String khadijeLogo = 'assets/images/khadije_logo.png'; + static const String pattern = 'assets/images/pattern.png'; + static const String diamond = 'assets/images/diamond.png'; + static const String mapBackground = 'assets/images/map_background.png'; + static const String level = 'assets/images/level.png'; + static const String finishedLevel = 'assets/images/finished_level.png'; + static const String currentLevel = 'assets/images/current_level.png'; + static const String error = 'assets/images/error.png'; + static const String leaf = 'assets/images/leaf.png'; + static const String diamondBig = 'assets/images/diamond_big.png'; + static const String ship = 'assets/images/ship.png'; + static const String loading = 'assets/images/loading.png'; + static const String intro_1 = 'assets/images/intro_1.jpg'; + static const String intro_2 = 'assets/images/intro_2.jpg'; + static const String intro_3 = 'assets/images/intro_3.jpg'; + static const String intro_4 = 'assets/images/intro_4.jpg'; + static const String intro_5 = 'assets/images/intro_5.jpg'; + static const String planet1 = 'assets/images/planet_1.png'; + static const String planet2 = 'assets/images/planet_2.png'; + static const String planet3 = 'assets/images/planet_3.png'; + static const String planet4 = 'assets/images/planet_4.png'; + static const String planet5 = 'assets/images/planet_5.png'; + static const String planet6 = 'assets/images/planet_6.png'; + static const String planet7 = 'assets/images/planet_7.png'; + static const String planet8 = 'assets/images/planet_8.png'; + static const String planet9 = 'assets/images/planet_9.png'; + static const String planet10 = 'assets/images/planet_10.png'; + static const String satellite = 'assets/images/satellite.png'; + static const String planetFinal = 'assets/images/planet_final.png'; + static const String behindDiamond = 'assets/images/behind_diamond.png'; + + /// SVG + static const String closeBtn = 'assets/svg/close_btn.svg'; + static const String musicOff = 'assets/svg/music_off.svg'; + static const String musicOn = 'assets/svg/music_on.svg'; + static const String button = 'assets/svg/button.svg'; + static const String buttonTablet = 'assets/svg/button_tablet.svg'; + static const String button2 = 'assets/svg/button_2.svg'; + static const String button2Tablet = 'assets/svg/button_2_tablet.svg'; + static const String button3 = 'assets/svg/button_3.svg'; + static const String button3Tablet = 'assets/svg/button_3_tablet.svg'; + static const String theme = 'assets/svg/theme.svg'; + static const String facebook = 'assets/svg/facebook.svg'; + static const String whatsapp = 'assets/svg/whatsapp.svg'; + static const String youtube = 'assets/svg/youtube.svg'; + static const String instagram = 'assets/svg/instagram.svg'; + static const String language = 'assets/svg/language.svg'; + static const String newHorizon = 'assets/svg/new_horizon.svg'; + static const String home = 'assets/svg/home.svg'; + static const String music = 'assets/svg/music.svg'; + static const String done = 'assets/svg/done.svg'; + static const String correct = 'assets/svg/correct.svg'; + static const String wrong = 'assets/svg/wrong.svg'; + static const String handPoint = 'assets/svg/hand_point.svg'; + static const String location = 'assets/svg/location.svg'; + static const String doneRounded = 'assets/svg/done_rounded.svg'; + static const String lang = 'assets/svg/lang.svg'; + static const String unMusic = 'assets/svg/unmusic.svg'; + static const String globe = 'assets/svg/globe.svg'; + static const String homeButton = 'assets/svg/home_button.svg'; + static const String diamondContainer = 'assets/svg/diamond_container.svg'; + static const String iconPlay = 'assets/svg/icon_play.svg'; + static const String iconNotif = 'assets/svg/icon_notif.svg'; + + static final List images = [ + backgroundHome, + hadiHoda, + khadijeLogo, + pattern, + diamond, + mapBackground, + level, + finishedLevel, + currentLevel, + error, + leaf, + diamondBig, + ship, + loading, + intro_1, + intro_2, + intro_3, + intro_4, + intro_5, + planet1, + planet2, + planet3, + planet4, + planet5, + planet6, + planet7, + planet8, + planet9, + planet10, + satellite, + planetFinal, + behindDiamond, + ]; } \ No newline at end of file diff --git a/lib/common_ui/resources/my_audios.dart b/lib/common_ui/resources/my_audios.dart new file mode 100644 index 0000000..5fbe749 --- /dev/null +++ b/lib/common_ui/resources/my_audios.dart @@ -0,0 +1,14 @@ +class MyAudios { + static const MyAudios _i = MyAudios._internal(); + const MyAudios._internal(); + factory MyAudios() => _i; + + static const String back = 'assets/audios/back.mp3'; + static const String clickButton = 'assets/audios/click_button.mp3'; + static const String diamondEnd = 'assets/audios/diamond_end.mp3'; + static const String diamondIncrease = 'assets/audios/diamond_increase.mp3'; + static const String home = 'assets/audios/home.mp3'; + static const String incorrectAnswer = 'assets/audios/incorrect_answer.mp3'; + static const String question = 'assets/audios/question.mp3'; + static const String rightAnswer = 'assets/audios/right_answer.mp3'; +} \ No newline at end of file diff --git a/lib/common_ui/resources/my_colors.dart b/lib/common_ui/resources/my_colors.dart index 10ff5ac..c021dc3 100644 --- a/lib/common_ui/resources/my_colors.dart +++ b/lib/common_ui/resources/my_colors.dart @@ -8,4 +8,5 @@ class MyColors { static const Color white = Colors.white; static const Color black = Colors.black; static const Color transparent = Colors.transparent; + static const Color purple = Color(0XFF0F0041); } diff --git a/lib/common_ui/resources/my_text_style.dart b/lib/common_ui/resources/my_text_style.dart index 4ce69d5..7cd4376 100644 --- a/lib/common_ui/resources/my_text_style.dart +++ b/lib/common_ui/resources/my_text_style.dart @@ -1,15 +1,90 @@ import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; -class MyTextStyle { - static const MyTextStyle _i = MyTextStyle._internal(); - const MyTextStyle._internal(); - factory MyTextStyle() => _i; +class MYTextStyle { + static const MYTextStyle _i = MYTextStyle._internal(); + const MYTextStyle._internal(); + factory MYTextStyle() => _i; - static const String fontFamily = ''; + static const String dinoKids = 'DinoKids'; + static const String marhey = 'Marhey'; + static const String baloo2 = 'Baloo_2'; + static const Color textColor = MyColors.white; - static const TextStyle lightXS = TextStyle( - fontFamily: fontFamily, - fontSize: 10, + static const TextStyle titr0 = TextStyle( + fontFamily: marhey, + fontWeight: FontWeight.w700, + fontSize: 26, + color: textColor, + ); + + static const TextStyle titr1 = TextStyle( + fontFamily: baloo2, + fontWeight: FontWeight.w800, + fontSize: 20, + color: textColor, + ); + + static const TextStyle titr3 = TextStyle( + fontFamily: marhey, + fontWeight: FontWeight.w600, + fontSize: 18, + color: textColor, + ); + + static const TextStyle titr4 = TextStyle( + fontFamily: baloo2, + fontWeight: FontWeight.w700, + fontSize: 14, + color: textColor, + ); + + static const TextStyle matn1 = TextStyle( + fontFamily: baloo2, + fontWeight: FontWeight.w600, + fontSize: 18, + color: textColor, + ); + + static const TextStyle matn2_3 = TextStyle( + fontFamily: baloo2, + fontWeight: FontWeight.w700, + fontSize: 18, + color: textColor, + ); + + static const TextStyle matn2_2 = TextStyle( + fontFamily: baloo2, + fontWeight: FontWeight.w700, + fontSize: 16, + color: textColor, + ); + + static const TextStyle matn2 = TextStyle( + fontFamily: baloo2, + fontWeight: FontWeight.w700, + fontSize: 14, + color: textColor, + ); + + static const TextStyle matn3 = TextStyle( + fontFamily: baloo2, + fontWeight: FontWeight.w500, + fontSize: 12, + color: textColor, + ); + + static const TextStyle button1 = TextStyle( + fontFamily: dinoKids, + fontWeight: FontWeight.w400, + fontSize: 45, + color: textColor, + ); + + static const TextStyle button2 = TextStyle( + fontFamily: dinoKids, fontWeight: FontWeight.w400, + fontSize: 30, + color: textColor, ); -} +} \ No newline at end of file diff --git a/lib/common_ui/theme/my_theme.dart b/lib/common_ui/theme/my_theme.dart index 1d8dd96..d59c6b9 100644 --- a/lib/common_ui/theme/my_theme.dart +++ b/lib/common_ui/theme/my_theme.dart @@ -1,8 +1,4 @@ -import 'package:hadi_hoda_flutter/core/utils/context_provider.dart'; import 'package:flutter/material.dart'; -import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; - -enum ColorsName { primaryColor } class MyTheme { static const MyTheme _i = MyTheme._internal(); @@ -10,23 +6,5 @@ class MyTheme { factory MyTheme() => _i; static final ThemeData light = ThemeData(brightness: Brightness.light); - static final ThemeData dark = ThemeData(brightness: Brightness.dark); - - static Map get lightColors => { - ColorsName.primaryColor: MyColors.white, - }; - - static Map get darkColors => { - ColorsName.primaryColor: MyColors.black, - }; -} - -extension ThemeExtension on BuildContext { - Map get customColors => - Theme.of(ContextProvider.context!).brightness == Brightness.dark - ? MyTheme.darkColors - : MyTheme.lightColors; - - Color get primaryColor => customColors[ColorsName.primaryColor]!; -} +} \ No newline at end of file diff --git a/lib/common_ui/theme/theme_service.dart b/lib/common_ui/theme/theme_service.dart index 37f4748..690905d 100644 --- a/lib/common_ui/theme/theme_service.dart +++ b/lib/common_ui/theme/theme_service.dart @@ -25,7 +25,7 @@ class ThemeService { case 'light': return ThemeMode.light; default: - return ThemeMode.system; + return ThemeMode.light; } } } \ No newline at end of file diff --git a/lib/core/auth_storage/auth_storage.dart b/lib/core/auth_storage/auth_storage.dart index 525eb2e..42b3ff3 100644 --- a/lib/core/auth_storage/auth_storage.dart +++ b/lib/core/auth_storage/auth_storage.dart @@ -19,7 +19,7 @@ class AuthStorage { } static void loadData() { - token = LocalStorage.readData(key: MyConstants.token); + token = LocalStorage.readData(key: MyConstants.token) ?? ''; } static bool isLogin() { diff --git a/lib/core/constants/my_api.dart b/lib/core/constants/my_api.dart index b1ba034..0e24eaa 100644 --- a/lib/core/constants/my_api.dart +++ b/lib/core/constants/my_api.dart @@ -6,6 +6,11 @@ class MyApi { static const Duration timeOut = Duration(seconds: 30); static const String contentType = 'application/json'; static const String defaultError = 'An unexpected error has occurred.'; + static const String noInternetError = 'Please check your internet connection.'; - static const String baseUrl = 'https://api.BASE_URL.com'; + static const String baseUrl = 'https://hadihoda.newhorizonco.uk/api'; + + static const String levels = '/quiz/optimized/v2/levels/'; + static const String images = '/quiz/optimized/download-all-files/images/'; + static const String audios = '/quiz/optimized/v2/download-all-files/audio/'; } diff --git a/lib/core/constants/my_constants.dart b/lib/core/constants/my_constants.dart index d03a559..b7a2826 100644 --- a/lib/core/constants/my_constants.dart +++ b/lib/core/constants/my_constants.dart @@ -1,8 +1,37 @@ +import 'dart:ui'; + +import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; + class MyConstants { static const MyConstants _i = MyConstants._internal(); const MyConstants._internal(); factory MyConstants() => _i; + /// Shared Preferences static const String token = 'TOKEN'; static const String theme = 'THEME'; + static const String levelBox = 'LEVEL_BOX'; + static const String downloadedImage = 'DOWNLOADED_IMAGE'; + static const String extractedImage = 'EXTRACTED_IMAGE'; + static const String downloadedAudio = 'DOWNLOADED_AUDIO'; + static const String extractedAudio = 'EXTRACTED_AUDIO'; + static const String selectLanguage = 'SELECT_LANGUAGE'; + static const String firstDownload = 'FIRST_DOWNLOAD'; + static const String currentLevel = 'CURRENT_LEVEL'; + static const String mainAudioService = 'MAIN_AUDIO_SERVICE'; + static const String effectAudioService = 'EFFECT_AUDIO_SERVICE'; + static const String firstIntro = 'FIRST_INTRO'; + static const String firstShowcase = 'FIRST_SHOWCASE'; + + /// Other + static const double mainAudioVolume = 0.3; + static const String defaultLanguage = 'en'; + static const List languages = [ + LanguageEntity(title: 'English (English)', code: 'en', locale: Locale('en','US')), + LanguageEntity(title: 'German (Germany)', code: 'de', locale: Locale('de','DE')), + // LanguageEntity(title: 'French (Français)', code: 'fr', locale: Locale('fr','FR')), + // LanguageEntity(title: 'Russian (Русский)', code: 'ru', locale: Locale('ru','RU')), + // LanguageEntity(title: 'Turkish (Türkçe)', code: 'tr', locale: Locale('tr','TR')), + LanguageEntity(title: 'Arabic (العربية)', code: 'ar', locale: Locale('ar','AE')), + ]; } \ No newline at end of file diff --git a/lib/core/error_handler/error_handler.dart b/lib/core/error_handler/error_handler.dart index ac586c1..8fbe09d 100644 --- a/lib/core/error_handler/error_handler.dart +++ b/lib/core/error_handler/error_handler.dart @@ -10,7 +10,7 @@ class ErrorHandler { static void handleError(DioException e) { if (e.response == null) { throw MyException( - errorMessage: e.message ?? MyApi.defaultError, + errorMessage: MyApi.noInternetError, statusCode: e.response?.statusCode, ); } else { diff --git a/lib/core/middleware/auth_middleware.dart b/lib/core/middleware/auth_middleware.dart deleted file mode 100644 index b03c337..0000000 --- a/lib/core/middleware/auth_middleware.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:hadi_hoda_flutter/core/auth_storage/auth_storage.dart'; -import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; -import 'package:go_router/go_router.dart'; - -class AuthMiddleware { - static const AuthMiddleware _i = AuthMiddleware._internal(); - const AuthMiddleware._internal(); - factory AuthMiddleware() => _i; - - static FutureOr redirect(BuildContext context, GoRouterState state) async { - if (AuthStorage.isLogin()) { - return Routes.samplePage; - } else { - return null; - } - } -} diff --git a/lib/core/middlewares/my_middlewares.dart b/lib/core/middlewares/my_middlewares.dart new file mode 100644 index 0000000..09b7f82 --- /dev/null +++ b/lib/core/middlewares/my_middlewares.dart @@ -0,0 +1,33 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; + +class MyMiddlewares { + static const MyMiddlewares _i = MyMiddlewares._internal(); + const MyMiddlewares._internal(); + factory MyMiddlewares() => _i; + + static FutureOr splash(BuildContext context, GoRouterState state) { + final String? firstDownload = LocalStorage.readData( + key: MyConstants.firstDownload); + if (firstDownload != 'true') { + return Routes.languagePage; + } else { + return null; + } + } + + static FutureOr intro(BuildContext context, GoRouterState state) { + final String? firstIntro = LocalStorage.readData( + key: MyConstants.firstIntro); + if (firstIntro == 'true') { + return Routes.homePage; + } else { + return null; + } + } +} diff --git a/lib/core/params/home_params.dart b/lib/core/params/home_params.dart new file mode 100644 index 0000000..fdd3091 --- /dev/null +++ b/lib/core/params/home_params.dart @@ -0,0 +1,13 @@ +class HomeParams { + int? id; + + HomeParams({this.id}); + + HomeParams copyWith({ + int? id, + }) { + return HomeParams( + id: id ?? this.id, + ); + } +} diff --git a/lib/core/params/language_params.dart b/lib/core/params/language_params.dart new file mode 100644 index 0000000..7e926b1 --- /dev/null +++ b/lib/core/params/language_params.dart @@ -0,0 +1,17 @@ +class LanguageParams { + String? code; + + LanguageParams({this.code}); + + LanguageParams copyWith({ + String? code, + }) { + return LanguageParams( + code: code ?? this.code, + ); + } + + Map get toQuery => { + if (code != null) 'lang': code, + }; +} diff --git a/lib/core/params/level_params.dart b/lib/core/params/level_params.dart new file mode 100644 index 0000000..1e885f8 --- /dev/null +++ b/lib/core/params/level_params.dart @@ -0,0 +1,13 @@ +class LevelParams { + int? id; + + LevelParams({this.id}); + + LevelParams copyWith({ + int? id, + }) { + return LevelParams( + id: id ?? this.id, + ); + } +} diff --git a/lib/core/params/no_params.dart b/lib/core/params/no_params.dart new file mode 100644 index 0000000..0d64db2 --- /dev/null +++ b/lib/core/params/no_params.dart @@ -0,0 +1 @@ +class NoParams {} diff --git a/lib/core/params/question_params.dart b/lib/core/params/question_params.dart new file mode 100644 index 0000000..0c6fff1 --- /dev/null +++ b/lib/core/params/question_params.dart @@ -0,0 +1,13 @@ +class QuestionParams { + int? id; + + QuestionParams({this.id}); + + QuestionParams copyWith({ + int? id, + }) { + return QuestionParams( + id: id ?? this.id, + ); + } +} diff --git a/lib/core/routers/hero_dialog_route.dart b/lib/core/routers/hero_dialog_route.dart new file mode 100644 index 0000000..7b53b6b --- /dev/null +++ b/lib/core/routers/hero_dialog_route.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; + +class HeroDialogRoute extends PageRoute { + HeroDialogRoute({ + required WidgetBuilder builder, + super.settings, + super.fullscreenDialog, + }) : _builder = builder; + + final WidgetBuilder _builder; + + @override + bool get opaque => false; + + @override + bool get fullscreenDialog => false; + + @override + bool get barrierDismissible => true; + + @override + Duration get transitionDuration => const Duration(seconds: 1); // Adjust as needed + + @override + bool get maintainState => false; + + @override + Color get barrierColor => Color(0XFF322386).withValues(alpha: 0.3); // Or your desired barrier color + + @override + Widget buildPage(BuildContext context, Animation animation, Animation secondaryAnimation) { + return _builder(context); + } + + @override + String get barrierLabel => ''; +} diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart index 6a31ae9..2b604c5 100644 --- a/lib/core/routers/my_routes.dart +++ b/lib/core/routers/my_routes.dart @@ -1,9 +1,29 @@ -import 'package:hadi_hoda_flutter/core/utils/context_provider.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/middlewares/my_middlewares.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_bloc.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_event.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/ui/download_page.dart'; +import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_bloc.dart'; +import 'package:hadi_hoda_flutter/features/home/presentation/ui/home_page.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_bloc.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/intro_page.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_bloc.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_event.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/ui/language_page.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_bloc.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/level_page.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_bloc.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_event.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/question_page.dart'; import 'package:hadi_hoda_flutter/features/sample/presentation/bloc/sample_bloc.dart'; import 'package:hadi_hoda_flutter/features/sample/presentation/ui/sample_page.dart'; +import 'package:hadi_hoda_flutter/features/splash/presentation/bloc/splash_bloc.dart'; +import 'package:hadi_hoda_flutter/features/splash/presentation/ui/splash_page.dart'; import 'package:hadi_hoda_flutter/init_bindings.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:go_router/go_router.dart'; class Routes { static const Routes _i = Routes._internal(); @@ -11,12 +31,30 @@ class Routes { factory Routes() => _i; static const String samplePage = '/sample_page'; + static const String introPage = '/intro_page'; + static const String splashPage = '/splash_page'; + static const String downloadPage = '/download_page'; + static const String languagePage = '/language_page'; + static const String homePage = '/home_page'; + static const String questionPage = '/question_page'; + static const String levelPage = '/level_page'; } -GoRouter get appPages => GoRouter( - initialLocation: Routes.samplePage, - navigatorKey: ContextProvider.navigatorKey, +final GoRouter appPages = _appPages(); + +GoRouter _appPages() => GoRouter( + initialLocation: Routes.splashPage, + navigatorKey: MyContext.rootNavigatorKey, routes: [ + GoRoute( + name: Routes.introPage, + path: Routes.introPage, + redirect: MyMiddlewares.intro, + builder: (context, state) => BlocProvider( + create: (context) => IntroBloc(), + child: const IntroPage(), + ), + ), GoRoute( name: Routes.samplePage, path: Routes.samplePage, @@ -25,5 +63,74 @@ GoRouter get appPages => GoRouter( child: const SamplePage(), ), ), + GoRoute( + name: Routes.splashPage, + path: Routes.splashPage, + redirect: MyMiddlewares.splash, + builder: (context, state) => BlocProvider( + create: (context) => SplashBloc(), + child: const SplashPage(), + ), + ), + GoRoute( + name: Routes.downloadPage, + path: Routes.downloadPage, + builder: (context, state) => BlocProvider( + create: (context) => DownloadBloc( + locator(), + locator(), + locator(), + locator(), + )..add(GetImagesEvent()), + child: const DownloadPage(), + ), + ), + GoRoute( + name: Routes.languagePage, + path: Routes.languagePage, + builder: (context, state) => BlocProvider( + create: (context) => LanguageBloc()..add(InitLanguageEvent()), + child: const LanguagePage(), + ), + ), + GoRoute( + name: Routes.homePage, + path: Routes.homePage, + builder: (context, state) => BlocProvider( + create: (context) => + HomeBloc( + locator(instanceName: MyConstants.mainAudioService), + locator(instanceName: MyConstants.effectAudioService), + ), + child: const HomePage(), + ), + ), + GoRoute( + name: Routes.levelPage, + path: Routes.levelPage, + builder: (context, state) => BlocProvider( + create: (context) => + LevelBloc( + locator(), + locator(instanceName: MyConstants.mainAudioService), + locator(instanceName: MyConstants.effectAudioService), + )..add(SetCurrentLevelEvent()), + child: const LevelPage(), + ), + ), + GoRoute( + name: Routes.questionPage, + path: '${Routes.questionPage}/:id', + builder: (context, state) => BlocProvider( + create: (context) => + QuestionBloc( + locator(), + locator(), + locator(instanceName: MyConstants.mainAudioService), + locator(instanceName: MyConstants.effectAudioService), + )..add(GetLevelEvent(state.pathParameters['id'], context)), + child: const QuestionPage(), + ), + ), ], -); +); \ No newline at end of file diff --git a/lib/core/services/audio_service.dart b/lib/core/services/audio_service.dart new file mode 100644 index 0000000..4fc6f9e --- /dev/null +++ b/lib/core/services/audio_service.dart @@ -0,0 +1,126 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:just_audio/just_audio.dart'; + +class AudioService { + final AudioPlayer _player = AudioPlayer(); + final StreamController _streamController = StreamController.broadcast(); + final double? volume; + + AudioService({this.volume}) { + _player.setVolume(volume ?? 1); + } + + Future setAudio({String? filePath, String? assetPath}) async { + try { + if (filePath != null) { + return await _player.setAudioSource(AudioSource.file(filePath)); + } else if (assetPath != null) { + return await _player.setAudioSource(AudioSource.asset(assetPath)); + } else { + return null; + } + } catch (e) { + if (kDebugMode) { + print('$e'); + } + return null; + } + } + + Future play() async { + try { + await _player.play(); + await _player.processingStateStream + .firstWhere((s) => s == ProcessingState.completed); + return; + } catch (e) { + if (kDebugMode) { + print('$e'); + } + } + } + + Future pause() async { + try { + await _player.pause(); + } catch (e) { + if (kDebugMode) { + print('$e'); + } + } + } + + Future stop() async { + try { + await _player.stop(); + } catch (e) { + if (kDebugMode) { + print('$e'); + } + } + } + + Future dispose() async { + try { + await _player.dispose(); + } catch (e) { + if (kDebugMode) { + print('$e'); + } + } + } + + Future changeMute() async { + try { + if (_player.volume == 0) { + await _player.setVolume(volume ?? 1); + } else { + await _player.setVolume(0); + } + } catch (e) { + if (kDebugMode) { + print('$e'); + } + } + } + + Future setVolume({required double volume}) async { + try { + await _player.setVolume(volume); + } catch (e) { + if (kDebugMode) { + print('$e'); + } + } + } + + Stream volumeStream() => _player.volumeStream; + + Stream playingStream() async* { + _player.processingStateStream.listen((event) { + if (event == ProcessingState.ready) { + _streamController.add(true); + } + if (event == ProcessingState.completed) { + _streamController.add(false); + } + }); + yield* _streamController.stream; + } + + Future setLoopMode({bool isLoop = false}) async { + try { + if (isLoop) { + await _player.setLoopMode(LoopMode.all); + } else { + await _player.setLoopMode(LoopMode.off); + } + } catch (e) { + if (kDebugMode) { + print('$e'); + } + } + } +} diff --git a/lib/core/utils/check_platform.dart b/lib/core/utils/check_platform.dart deleted file mode 100644 index 9da2f2d..0000000 --- a/lib/core/utils/check_platform.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:hadi_hoda_flutter/core/utils/my_device.dart'; - -dynamic checkPlatform({ - dynamic android, - dynamic iOS, - dynamic web, -}) { - if (MyDevice.isAndroid()) { - return android; - } else if (MyDevice.isIOS()) { - return iOS; - } else if (MyDevice.isWeb()) { - return web; - } -} diff --git a/lib/core/utils/context_provider.dart b/lib/core/utils/context_provider.dart deleted file mode 100644 index e92a900..0000000 --- a/lib/core/utils/context_provider.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class ContextProvider { - static const ContextProvider _i = ContextProvider._internal(); - const ContextProvider._internal(); - factory ContextProvider() => _i; - - static GlobalKey navigatorKey = GlobalKey(); - static BuildContext? context = navigatorKey.currentContext; -} diff --git a/lib/core/utils/convert_size.dart b/lib/core/utils/convert_size.dart new file mode 100644 index 0000000..0a114d9 --- /dev/null +++ b/lib/core/utils/convert_size.dart @@ -0,0 +1,5 @@ +extension ConvertSize on double? { + String get toMB { + return this == null ? '0.0' : (this! / (1024 * 1024)).toStringAsFixed(1); + } +} diff --git a/lib/core/utils/local_storage.dart b/lib/core/utils/local_storage.dart index baa5e7c..c6302e7 100644 --- a/lib/core/utils/local_storage.dart +++ b/lib/core/utils/local_storage.dart @@ -11,12 +11,12 @@ class LocalStorage { _box = await SharedPreferences.getInstance(); } - static Future saveData({required String key, required dynamic value}) async { + static Future saveData({required String key, required String value}) async { await _box.setString(key, value); } - static String readData({required String key}) { - return _box.getString(key) ?? ''; + static String? readData({required String key}) { + return _box.getString(key); } static Future deleteData({required String key}) async { diff --git a/lib/core/utils/my_context.dart b/lib/core/utils/my_context.dart new file mode 100644 index 0000000..a9e91b3 --- /dev/null +++ b/lib/core/utils/my_context.dart @@ -0,0 +1,10 @@ +import 'package:flutter/cupertino.dart'; + +class MyContext { + static const MyContext _i = MyContext._internal(); + const MyContext._internal(); + factory MyContext() => _i; + + static GlobalKey rootNavigatorKey = GlobalKey(); + static BuildContext get = rootNavigatorKey.currentContext!; +} diff --git a/lib/core/utils/my_device.dart b/lib/core/utils/my_device.dart index 18ba731..3bf919a 100644 --- a/lib/core/utils/my_device.dart +++ b/lib/core/utils/my_device.dart @@ -1,5 +1,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; class MyDevice { static const MyDevice _i = MyDevice._internal(); @@ -58,4 +59,40 @@ class MyDevice { static bool isWeb() { return kIsWeb; } + + /// Set Device based on Orientation + static Future setPortrait() async { + await SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + ]); + } + + static Future setLandscape() async { + await SystemChrome.setPreferredOrientations([ + DeviceOrientation.landscapeLeft, + DeviceOrientation.landscapeRight, + ]); + } + + static Future setAllOrientations() async { + await SystemChrome.setPreferredOrientations([ + DeviceOrientation.landscapeLeft, + DeviceOrientation.landscapeRight, + DeviceOrientation.portraitUp, + DeviceOrientation.portraitDown, + ]); + } + + /// Set System UI Mode + static Future setEdgeToEdge() async { + await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + } + + static Future setImmersiveSticky() async { + await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky); + } + + static Future setImmersive() async { + await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive); + } } diff --git a/lib/core/utils/my_scroll_behavior.dart b/lib/core/utils/my_scroll_behavior.dart deleted file mode 100644 index 41ef961..0000000 --- a/lib/core/utils/my_scroll_behavior.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -class MyScrollBehavior extends ScrollBehavior { - @override - Set get dragDevices => { - PointerDeviceKind.touch, - PointerDeviceKind.mouse, - PointerDeviceKind.trackpad, - }; -} diff --git a/lib/core/utils/screen_size.dart b/lib/core/utils/screen_size.dart index b4efd63..689b620 100644 --- a/lib/core/utils/screen_size.dart +++ b/lib/core/utils/screen_size.dart @@ -1,6 +1,13 @@ import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; extension ScreenSize on BuildContext { double get widthScreen => MediaQuery.sizeOf(this).width; double get heightScreen => MediaQuery.sizeOf(this).height; } + + +extension AdaptiveSize on double { + double get w => MyContext.get.widthScreen * this; + double get h => MyContext.get.heightScreen * this; +} diff --git a/lib/core/utils/set_platform_size.dart b/lib/core/utils/set_platform_size.dart new file mode 100644 index 0000000..78a1f45 --- /dev/null +++ b/lib/core/utils/set_platform_size.dart @@ -0,0 +1,35 @@ +import 'package:flutter/cupertino.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_device.dart'; + +T? setPlatform({ + T? android, + T? iOS, + T? web, +}) { + if (MyDevice.isAndroid()) { + return android; + } else if (MyDevice.isIOS()) { + return iOS; + } else if (MyDevice.isWeb()) { + return web; + } else { + return null; + } +} + +T? setSize({ + required BuildContext context, + T? mobile, + T? tablet, + T? desktop, +}) { + if (MyDevice.isMobile(context)) { + return mobile; + } else if (MyDevice.isTablet(context)) { + return tablet; + } else if (MyDevice.isDesktop(context)) { + return desktop; + } else { + return null; + } +} diff --git a/lib/core/utils/storage_path.dart b/lib/core/utils/storage_path.dart new file mode 100644 index 0000000..56a6746 --- /dev/null +++ b/lib/core/utils/storage_path.dart @@ -0,0 +1,11 @@ +import 'dart:io'; + +import 'package:path_provider/path_provider.dart'; + +class StoragePath { + static Directory documentDir = Directory(''); + + static Future getDocumentDir() async { + documentDir = await getApplicationDocumentsDirectory(); + } +} \ No newline at end of file diff --git a/lib/core/widgets/animations/fade_anim.dart b/lib/core/widgets/animations/fade_anim.dart new file mode 100644 index 0000000..0a5e40b --- /dev/null +++ b/lib/core/widgets/animations/fade_anim.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; + +class FadeAnim extends StatefulWidget { + const FadeAnim({super.key, required this.child}); + + final Widget child; + + @override + State createState() => _FadeAnimState(); +} + +class _FadeAnimState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(milliseconds: 500), + reverseDuration: Duration(seconds: 500), + ); + _animation = Tween( + begin: 0, + end: 1, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.linear)); + + _controller.forward(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => FadeTransition( + opacity: _animation, + child: child, + ), + ); + } +} diff --git a/lib/core/widgets/animations/globe_animation.dart b/lib/core/widgets/animations/globe_animation.dart new file mode 100644 index 0000000..4911704 --- /dev/null +++ b/lib/core/widgets/animations/globe_animation.dart @@ -0,0 +1,104 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; + +class GlobeAnimation extends StatefulWidget { + const GlobeAnimation({super.key, required this.child, this.state = true}); + + final Widget child; + final bool state; + + @override + State createState() => _GlobeAnimationState(); +} + +class _GlobeAnimationState extends State + with SingleTickerProviderStateMixin { + Timer? _timer; + Gradient? _gradient; + late AnimationController _controller; + late Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(seconds: 1), + reverseDuration: Duration(seconds: 1), + ); + _animation = Tween( + begin: 1, + end: 1.05, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.linear)); + } + + @override + void didUpdateWidget(covariant GlobeAnimation oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.state) { + _controller.repeat(reverse: true); + _timer = Timer.periodic(Duration(seconds: 1), (timer) { + if (_gradient == null) { + if (!mounted) return; + setState(() { + _gradient = RadialGradient( + colors: [ + Color(0XFFDFCD00), + Color(0XFFDFCD00).withValues(alpha: 0.35), + Color(0XFFDFCD00).withValues(alpha: 0), + ], + center: Alignment.center, + ); + }); + } else { + setState(() { + _gradient = null; + }); + } + }); + } else { + _timer?.cancel(); + _timer = null; + _controller.stop(); + if (!mounted) return; + setState(() { + _gradient = RadialGradient( + colors: [ + Color(0XFFDFCD00).withValues(alpha: 0), + Color(0XFFDFCD00).withValues(alpha: 0), + Color(0XFFDFCD00).withValues(alpha: 0), + ], + center: Alignment.center, + ); + }); + } + } + + @override + void dispose() { + _timer?.cancel(); + _timer = null; + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => ScaleTransition( + scale: _animation, + alignment: Alignment.center, + child: AnimatedContainer( + duration: const Duration(milliseconds: 500), + padding: EdgeInsets.all(MySpaces.s0), + decoration: BoxDecoration(gradient: _gradient), + child: child, + ), + ), + ); + } +} diff --git a/lib/core/widgets/animations/rotation_anim.dart b/lib/core/widgets/animations/rotation_anim.dart new file mode 100644 index 0000000..ea4d9e9 --- /dev/null +++ b/lib/core/widgets/animations/rotation_anim.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; + +class RotationAnim extends StatefulWidget { + const RotationAnim({super.key, required this.child}); + + final Widget child; + + @override + State createState() => _RotationAnimState(); +} + +class _RotationAnimState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(seconds: 20), + ); + _animation = Tween( + begin: 0, + end: 20, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.linear)); + + _controller.repeat(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => RotationTransition( + turns: _animation, + alignment: Alignment.center, + child: child, + ), + ); + } +} diff --git a/lib/core/widgets/animations/rotation_planet.dart b/lib/core/widgets/animations/rotation_planet.dart new file mode 100644 index 0000000..0a6f942 --- /dev/null +++ b/lib/core/widgets/animations/rotation_planet.dart @@ -0,0 +1,51 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +class RotationPlanet extends StatefulWidget { + const RotationPlanet({super.key, required this.child}); + + final Widget child; + + @override + State createState() => _RotationPlanetState(); +} + +class _RotationPlanetState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(seconds: 200 + Random().nextInt(300)), + ); + _animation = Tween( + begin: 0, + end: Random().nextBool() ? 1 : -1, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.linear)); + _controller.repeat(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => RotationTransition( + turns: _animation, + alignment: Alignment.center, + child: child, + ), + ); + } +} diff --git a/lib/core/widgets/animations/scale_anim.dart b/lib/core/widgets/animations/scale_anim.dart new file mode 100644 index 0000000..e76c247 --- /dev/null +++ b/lib/core/widgets/animations/scale_anim.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; + +class ScaleAnim extends StatefulWidget { + const ScaleAnim({super.key, required this.child, this.state = false}); + + final Widget child; + final bool state; + + @override + State createState() => _ScaleAnimState(); +} + +class _ScaleAnimState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(milliseconds: 200), + reverseDuration: Duration(milliseconds: 200), + ); + _animation = Tween( + begin: 0, + end: 1, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.linear)); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + widget.state ? _controller.forward() : _controller.reverse(); + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => ScaleTransition( + scale: _animation, + alignment: Alignment.center, + child: child, + ), + ); + } +} diff --git a/lib/core/widgets/animations/ship_anim.dart b/lib/core/widgets/animations/ship_anim.dart new file mode 100644 index 0000000..217ca2d --- /dev/null +++ b/lib/core/widgets/animations/ship_anim.dart @@ -0,0 +1,57 @@ +import 'dart:math' as math; + +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; + +class ShipAnim extends StatefulWidget { + const ShipAnim({super.key, required this.child}); + + final Widget child; + + @override + State createState() => _ShipAnimState(); +} + +class _ShipAnimState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(seconds: 15), + reverseDuration: Duration(seconds: 15), + )..repeat(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + builder: (context, child) { + // The angle of the ship in its circular path + final angle = _controller.value * 2 * math.pi; + // The radius of the circular path + final radius = context.widthScreen * 0.05; + // Calculate the x and y coordinates for the ship + final x = radius * math.cos(angle) + setSize(context: context, mobile: 60, tablet: 90)!; + final y = radius * math.sin(angle) - setSize(context: context, mobile: 70, tablet: 100)!; // -80 to lift it up + + return Transform.translate( + offset: Offset(x, y), + child: child, + ); + }, + child: widget.child, + ); + } +} diff --git a/lib/core/widgets/animations/slide_anim.dart b/lib/core/widgets/animations/slide_anim.dart new file mode 100644 index 0000000..14c02c9 --- /dev/null +++ b/lib/core/widgets/animations/slide_anim.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; + +class SlideAnim extends StatefulWidget { + const SlideAnim({ + super.key, + required this.child, + required this.index, + required this.controller, + }); + + final Widget child; + final int index; + final AnimationController controller; + + @override + State createState() => _SlideAnimState(); +} + +class _SlideAnimState extends State + with SingleTickerProviderStateMixin { + late Animation _animation; + final List offsetList = [ + Offset(-2, -2), + Offset(2, -2), + Offset(-2, 2), + Offset(2, 2), + ]; + + @override + void initState() { + super.initState(); + _animation = Tween( + begin: offsetList[widget.index], + end: Offset.zero, + ).animate(CurvedAnimation(parent: widget.controller, curve: Curves.linear)); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: widget.controller, + child: widget.child, + builder: (context, child) => + SlideTransition(position: _animation, child: child), + ); + } +} diff --git a/lib/core/widgets/animations/slide_down_fade.dart b/lib/core/widgets/animations/slide_down_fade.dart new file mode 100644 index 0000000..e035c65 --- /dev/null +++ b/lib/core/widgets/animations/slide_down_fade.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; + +class SlideDownFade extends StatefulWidget { + const SlideDownFade({ + super.key, + required this.child, + this.delay = Duration.zero, + }); + + final Widget child; + final Duration delay; + + @override + State createState() => _SlideDownFadeState(); +} + +class _SlideDownFadeState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _fadeAnim; + late Animation _slideAnim; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(milliseconds: 500), + reverseDuration: Duration(milliseconds: 500), + ); + + _fadeAnim = Tween( + begin: 0, + end: 1, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeIn)); + + _slideAnim = Tween( + begin: Offset(0, -0.1), + end: Offset.zero, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeIn)); + startAnim(); + } + + Future startAnim() async { + await Future.delayed(widget.delay, () { + _controller.forward(); + }); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => FadeTransition( + opacity: _fadeAnim, + child: SlideTransition(position: _slideAnim, child: child), + ), + ); + } +} diff --git a/lib/core/widgets/animations/slide_up_fade.dart b/lib/core/widgets/animations/slide_up_fade.dart new file mode 100644 index 0000000..5b9dda4 --- /dev/null +++ b/lib/core/widgets/animations/slide_up_fade.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; + +class SlideUpFade extends StatefulWidget { + const SlideUpFade({ + super.key, + required this.child, + this.delay = Duration.zero, + }); + + final Widget child; + final Duration delay; + + @override + State createState() => _SlideUpFadeState(); +} + +class _SlideUpFadeState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _fadeAnim; + late Animation _slideAnim; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(milliseconds: 500), + reverseDuration: Duration(milliseconds: 500), + ); + + _fadeAnim = Tween( + begin: 0, + end: 1, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeIn)); + + _slideAnim = Tween( + begin: Offset(0, 0.1), + end: Offset.zero, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeIn)); + startAnim(); + } + + Future startAnim() async { + await Future.delayed(widget.delay, () { + _controller.forward(); + }); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => FadeTransition( + opacity: _fadeAnim, + child: SlideTransition(position: _slideAnim, child: child), + ), + ); + } +} diff --git a/lib/core/widgets/answer_box/answer_box.dart b/lib/core/widgets/answer_box/answer_box.dart new file mode 100644 index 0000000..b01d027 --- /dev/null +++ b/lib/core/widgets/answer_box/answer_box.dart @@ -0,0 +1,98 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/answer_box/styles/picture_box.dart'; +import 'package:hadi_hoda_flutter/core/widgets/answer_box/styles/text_box.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/showcase/my_showcase_widget.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; + +class AnswerBox extends StatefulWidget { + const AnswerBox({ + super.key, + required this.answer, + required this.correctAnswer, + required this.index, + required this.globalKey, + this.onTap, + this.onNotifTap, + }); + + final AnswerEntity answer; + final int correctAnswer; + final void Function(bool isCorrect, int correctAnswer)? onTap; + final int index; + final Function(AnswerEntity answer)? onNotifTap; + final GlobalKey globalKey; + + @override + State createState() => _AnswerBoxState(); +} + +class _AnswerBoxState extends State { + bool selected = false; + + @override + Widget build(BuildContext context) { + return Hero( + tag: 'Hero_answer_${widget.answer.id}', + child: Material( + type: MaterialType.transparency, + child: GestureDetector( + onTap: !selected + ? () { + setState(() { + selected = true; + }); + widget.onTap?.call( + widget.index == widget.correctAnswer, + widget.correctAnswer, + ); + } + : null, + child: Stack( + alignment: Alignment.center, + clipBehavior: Clip.none, + children: [ + AnswerPictureBox( + selected: selected, + index: widget.index, + image: widget.answer.image ?? '', + correctAnswer: widget.correctAnswer, + onTap: () { + widget.onNotifTap?.call(widget.answer); + }, + ), + Positioned( + left: 0, + right: 0, + bottom: -60, + child: AnswerTextBox(text: widget.answer.title ?? ''), + ), + PositionedDirectional( + top: setSize(context: context, mobile: MySpaces.s12, tablet: MySpaces.s20), + end: setSize(context: context, mobile: MySpaces.s8, tablet: MySpaces.s20), + child: MyShowcaseWidget( + globalKey: widget.globalKey, + type: ShowcaseTooltipType.bottom, + description: context.translate.showcase_notif, + child: GestureDetector( + onTap: () { + widget.onNotifTap?.call(widget.answer); + }, + child: MyImage( + image: MyAssets.iconNotif, + size: setSize(context: context, tablet: 50), + ), + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/core/widgets/answer_box/answer_box_show.dart b/lib/core/widgets/answer_box/answer_box_show.dart new file mode 100644 index 0000000..726c799 --- /dev/null +++ b/lib/core/widgets/answer_box/answer_box_show.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/answer_box/styles/picture_box.dart'; +import 'package:hadi_hoda_flutter/core/widgets/answer_box/styles/text_box.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; + +class AnswerBoxShow extends StatelessWidget { + const AnswerBoxShow({ + super.key, + required this.answer, + required this.index, + this.onNotifTap, + }); + + final AnswerEntity answer; + final int index; + final Function(AnswerEntity answer)? onNotifTap; + + @override + Widget build(BuildContext context) { + return Hero( + tag: 'Hero_answer_${answer.id}', + child: Material( + type: MaterialType.transparency, + child: Stack( + alignment: Alignment.center, + clipBehavior: Clip.none, + children: [ + AnswerPictureBox( + selected: false, + index: index, + image: answer.image ?? '', + correctAnswer: 0, + ), + Positioned( + left: 0, + right: 0, + bottom: -MySpaces.s40, + child: AnswerTextBox(text: answer.title ?? ''), + ), + PositionedDirectional( + top: setSize(context: context, mobile: MySpaces.s30, tablet: 60), + end: setSize(context: context, mobile: MySpaces.s20, tablet: 60), + child: GestureDetector( + onTap: () { + onNotifTap?.call(answer); + }, + child: MyImage( + image: MyAssets.iconNotif, + size: setSize(context: context, mobile: MySpaces.s40, tablet: 60), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/core/widgets/answer_box/styles/picture_box.dart b/lib/core/widgets/answer_box/styles/picture_box.dart new file mode 100644 index 0000000..f1f2a56 --- /dev/null +++ b/lib/core/widgets/answer_box/styles/picture_box.dart @@ -0,0 +1,163 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; + +class AnswerPictureBox extends StatelessWidget { + const AnswerPictureBox({ + super.key, + required this.selected, + required this.image, + required this.index, + required this.correctAnswer, + this.onTap, + }); + + final bool selected; + final String image; + final int index; + final int correctAnswer; + final VoidCallback? onTap; + + @override + Widget build(BuildContext context) { + return CustomPaint( + painter: _CustomShapePainter(), + child: ClipPath( + clipper: _CustomShapeClipper(), + child: Stack( + alignment: Alignment.center, + children: [ + AnimatedSwitcher( + duration: Duration(milliseconds: 150), + reverseDuration: Duration(milliseconds: 150), + switchInCurve: Curves.linear, + switchOutCurve: Curves.linear, + child: selected && (index != correctAnswer) ? + Image.file( + key: Key('1'), + File(image), + fit: BoxFit.cover, + color: MyColors.black, + colorBlendMode: BlendMode.color, + ) : + Image.file( + key: Key('2'), + File(image), + fit: BoxFit.cover, + ), + transitionBuilder: (child, animation) => + FadeTransition( + opacity: animation, + child: child, + ), + ), + PositionedDirectional( + top: 0, + child: Container( + width: MySpaces.s34, + alignment: Alignment.center, + decoration: BoxDecoration( + color: Color(0XFFF2F7FF), + borderRadius: BorderRadius.vertical( + bottom: Radius.circular(10), + ), + ), + child: Text( + '$index', + style: MYTextStyle.titr1.copyWith( + color: Color(0XFF9B85D8), + ), + ), + ), + ), + if(selected) + PositionedDirectional( + top: setSize(context: context, mobile: MySpaces.s8, tablet: MySpaces.s20), + start: setSize(context: context, mobile: MySpaces.s8, tablet: MySpaces.s20), + child: MyImage( + image: index == correctAnswer ? MyAssets.correct : MyAssets + .wrong, + ), + ), + ], + ), + ), + ); + } +} + +class _CustomShapePainter extends CustomPainter { + @override + void paint(Canvas canvas, Size size) { + final Paint strokePaint = Paint() + ..color = Color(0XFFF2F7FF) + ..style = PaintingStyle.stroke + ..strokeWidth = 4; + + final Path path = _CustomShapeClipper().getClip(size); + canvas.drawPath(path, strokePaint); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) { + return this != oldDelegate; + } +} + +class _CustomShapeClipper extends CustomClipper { + @override + Path getClip(Size size) { + // Original SVG dimensions to calculate the scaling factors. + final double originalWidth = 193.0; + final double originalHeight = 189.0; + + // Scaling factors to make the path responsive. + final double scaleX = size.width / originalWidth; + final double scaleY = size.height / originalHeight; + + // The path is defined using the scaled coordinates from the SVG. + final Path path = Path() + ..moveTo(148.483 * scaleX, 4.10254 * scaleY) + ..cubicTo(131.624 * scaleX, 1.93333 * scaleY, 111.221 * scaleX, 1.00169 * scaleY, 91.2451 * scaleX, 1.2666 * scaleY) + ..cubicTo(71.2667 * scaleX, 1.53156 * scaleY, 51.7626 * scaleX, 2.99274 * scaleY, 36.6973 * scaleX, 5.59668 * scaleY) + ..cubicTo(29.1597 * scaleX, 6.8995 * scaleY, 22.7796 * scaleX, 8.48114 * scaleY, 18.0205 * scaleX, 10.3203 * scaleY) + ..cubicTo(15.641 * scaleX, 11.2399 * scaleY, 13.7026 * scaleX, 12.2101 * scaleY, 12.2383 * scaleX, 13.2188 * scaleY) + ..cubicTo(10.7653 * scaleX, 14.2333 * scaleY, 9.84633 * scaleX, 15.2359 * scaleY, 9.3916 * scaleX, 16.1904 * scaleY) + ..cubicTo(8.252 * scaleX, 18.5828 * scaleY, 7.18153 * scaleX, 22.466 * scaleY, 6.2207 * scaleX, 27.5654 * scaleY) + ..cubicTo(5.26481 * scaleX, 32.6387 * scaleY, 4.43215 * scaleX, 38.8273 * scaleY, 3.73535 * scaleX, 45.7744 * scaleY) + ..cubicTo(2.34189 * scaleX, 59.6675 * scaleY, 1.49647 * scaleX, 76.5363 * scaleY, 1.27832 * scaleX, 93.4678 * scaleY) + ..cubicTo(1.06017 * scaleX, 110.4 * scaleY, 1.47057 * scaleX, 127.372 * scaleY, 2.58301 * scaleX, 141.473 * scaleY) + ..cubicTo(3.13928 * scaleX, 148.524 * scaleY, 3.86921 * scaleX, 154.841 * scaleY, 4.78125 * scaleX, 160.068 * scaleY) + ..cubicTo(5.69748 * scaleX, 165.32 * scaleY, 6.78334 * scaleX, 169.385 * scaleY, 8.01367 * scaleX, 171.984 * scaleY) + ..cubicTo(8.53417 * scaleX, 173.084 * scaleY, 9.59654 * scaleX, 174.216 * scaleY, 11.2891 * scaleX, 175.343 * scaleY) + ..cubicTo(12.9722 * scaleX, 176.463 * scaleY, 15.1988 * scaleX, 177.524 * scaleY, 17.9219 * scaleX, 178.515 * scaleY) + ..cubicTo(23.3679 * scaleX, 180.496 * scaleY, 30.6491 * scaleX, 182.138 * scaleY, 39.1807 * scaleX, 183.437 * scaleY) + ..cubicTo(56.2336 * scaleX, 186.032 * scaleY, 78.0934 * scaleX, 187.222 * scaleY, 99.8242 * scaleX, 187.064 * scaleY) + ..cubicTo(121.556 * scaleX, 186.906 * scaleY, 143.101 * scaleX, 185.4 * scaleY, 159.525 * scaleX, 182.622 * scaleY) + ..cubicTo(167.745 * scaleX, 181.232 * scaleY, 174.627 * scaleX, 179.531 * scaleY, 179.594 * scaleX, 177.548 * scaleY) + ..cubicTo(182.079 * scaleX, 176.556 * scaleY, 184.034 * scaleX, 175.512 * scaleY, 185.429 * scaleX, 174.437 * scaleY) + ..cubicTo(186.83 * scaleX, 173.355 * scaleY, 187.568 * scaleX, 172.319 * scaleY, 187.812 * scaleX, 171.361 * scaleY) + ..lineTo(187.812 * scaleX, 171.361 * scaleY) // In SVG, this was H (horizontal line), equivalent to lineTo in Flutter + ..cubicTo(189.156 * scaleX, 166.074 * scaleY, 190.148 * scaleX, 155.525 * scaleY, 190.773 * scaleX, 142.157 * scaleY) + ..cubicTo(191.396 * scaleX, 128.832 * scaleY, 191.651 * scaleX, 112.822 * scaleY, 191.552 * scaleX, 96.6875 * scaleY) + ..cubicTo(191.453 * scaleX, 80.5539 * scaleY, 191.001 * scaleX, 64.3091 * scaleY, 190.213 * scaleX, 50.5156 * scaleY) + ..cubicTo(189.423 * scaleX, 36.6928 * scaleY, 188.299 * scaleX, 25.4153 * scaleY, 186.876 * scaleX, 19.167 * scaleY) + ..cubicTo(186.404 * scaleX, 17.0929 * scaleY, 185.566 * scaleX, 15.3424 * scaleY, 184.087 * scaleX, 14.1582 * scaleY) + ..cubicTo(181.343 * scaleX, 11.9613 * scaleY, 176.72 * scaleX, 9.98089 * scaleY, 170.561 * scaleX, 8.27539 * scaleY) + ..cubicTo(164.434 * scaleX, 6.579 * scaleY, 156.914 * scaleX, 5.18731 * scaleY, 148.483 * scaleX, 4.10254 * scaleY) + ..close(); // Closes the path to form a complete shape. + + return path; + } + + @override + bool shouldReclip(covariant CustomClipper oldClipper) { + return this != oldClipper; + } +} \ No newline at end of file diff --git a/lib/core/widgets/answer_box/styles/text_box.dart b/lib/core/widgets/answer_box/styles/text_box.dart new file mode 100644 index 0000000..343e1c6 --- /dev/null +++ b/lib/core/widgets/answer_box/styles/text_box.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; + +class AnswerTextBox extends StatelessWidget { + const AnswerTextBox({super.key, required this.text}); + + final String text; + + @override + Widget build(BuildContext context) { + return ClipPath( + clipper: WavyBannerClipper(), + child: Container( + height: 90, + padding: EdgeInsets.symmetric(horizontal: MySpaces.s10), + alignment: Alignment.center, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFFFFFFFF), + Color(0XFFCADCFF), + ], + ), + ), + child: Text( + text, + textAlign: TextAlign.center, + style: MYTextStyle.matn2.copyWith( + color: Color(0XFF322386), + height: 1.2, + ), + maxLines: 5, + ), + ), + ); + } +} + +class WavyBannerClipper extends CustomClipper { + @override + Path getClip(Size size) { + final sx = size.width / 480.0; + final sy = size.height / 149.0; + + final path = Path() + ..moveTo(14.0623 * sx, 20.0845 * sy) + ..cubicTo(-2.44627 * sx, 34.3262 * sy, -4.98303 * sx, 117.33 * sy, 9.45711 * sx, 135.641 * sy) + ..cubicTo(22.9216 * sx, 152.647 * sy, 436.846 * sx, 154.003 * sy, 462.799 * sx, 136.319 * sy) + ..cubicTo(488.753 * sx, 118.634 * sy, 483.484 * sx, 26.7097 * sy, 459.365 * sx, 10.3813 * sy) + ..cubicTo(435.246 * sx, -5.94701 * sy, 41.0302 * sx, -3.23423 * sy, 14.0623 * sx, 20.0845 * sy) + ..close(); + return path; + } + + @override + bool shouldReclip(covariant CustomClipper oldClipper) => false; +} \ No newline at end of file diff --git a/lib/core/widgets/button/my_blue_button.dart b/lib/core/widgets/button/my_blue_button.dart new file mode 100644 index 0000000..b90f8b1 --- /dev/null +++ b/lib/core/widgets/button/my_blue_button.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; + +class MyBlueButton extends StatelessWidget { + const MyBlueButton({ + super.key, + this.onTap, + this.title, + this.top, + }); + + final VoidCallback? onTap; + final String? title; + final double? top; + + @override + Widget build(BuildContext context) { + return MyInkwell( + onTap: onTap, + highlightColor: MyColors.transparent, + splashColor: MyColors.transparent, + child: Stack( + alignment: Alignment.center, + children: [ + MyImage(image: + setSize( + context: context, + mobile: MyAssets.button, + tablet: MyAssets.buttonTablet, + ) ?? + '', + ), + PositionedDirectional( + top: top ?? setSize(context: context, mobile: MySpaces.s6, tablet: MySpaces.s20), + child: Text( + title ?? '', + style: MYTextStyle.button1.copyWith( + color: Color(0XFF1D6EFF), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/core/widgets/button/my_white_button.dart b/lib/core/widgets/button/my_white_button.dart new file mode 100644 index 0000000..e88b951 --- /dev/null +++ b/lib/core/widgets/button/my_white_button.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; + +class MyWhiteButton extends StatelessWidget { + const MyWhiteButton({ + super.key, + this.onTap, + this.title, + this.top, + }); + + final VoidCallback? onTap; + final String? title; + final double? top; + + @override + Widget build(BuildContext context) { + return MyInkwell( + onTap: onTap, + highlightColor: MyColors.transparent, + splashColor: MyColors.transparent, + child: Stack( + alignment: Alignment.center, + children: [ + MyImage( + image: setSize( + context: context, + mobile: MyAssets.button3, + tablet: MyAssets.button3Tablet, + ) ?? '', + ), + PositionedDirectional( + top: top ?? setSize(context: context, mobile: MySpaces.s6, tablet: MySpaces.s22), + child: Text( + title ?? '', + style: MYTextStyle.button1.copyWith( + color: Color(0XFFD93D16), + fontSize: setSize(context: context, tablet: 60), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/core/widgets/button/my_yellow_button.dart b/lib/core/widgets/button/my_yellow_button.dart new file mode 100644 index 0000000..33fc12e --- /dev/null +++ b/lib/core/widgets/button/my_yellow_button.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; + +class MyYellowButton extends StatelessWidget { + const MyYellowButton({ + super.key, + this.onTap, + this.title, + this.top, + }); + + final VoidCallback? onTap; + final String? title; + final double? top; + + @override + Widget build(BuildContext context) { + return MyInkwell( + onTap: onTap, + highlightColor: MyColors.transparent, + splashColor: MyColors.transparent, + child: Stack( + alignment: Alignment.center, + children: [ + MyImage(image: + setSize( + context: context, + mobile: MyAssets.button2, + tablet: MyAssets.button2Tablet, + ) ?? + '', + ), + PositionedDirectional( + top: top ?? setSize(context: context, mobile: MySpaces.s6, tablet: MySpaces.s22), + child: Text( + title ?? '', + style: MYTextStyle.button1.copyWith( + color: Color(0XFFD93D16), + fontSize: setSize(context: context, tablet: 60), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/core/widgets/confetti/my_confetti.dart b/lib/core/widgets/confetti/my_confetti.dart new file mode 100644 index 0000000..a5f0486 --- /dev/null +++ b/lib/core/widgets/confetti/my_confetti.dart @@ -0,0 +1,60 @@ +import 'dart:math'; + +import 'package:confetti/confetti.dart'; +import 'package:flutter/material.dart'; + +class MyConfetti extends StatelessWidget { + const MyConfetti({super.key, required this.controller}); + + final ConfettiController controller; + + @override + Widget build(BuildContext context) { + return ConfettiWidget( + confettiController: controller, + shouldLoop: false, + blastDirectionality: BlastDirectionality.explosive, + blastDirection: pi / 2, + gravity: 1, + emissionFrequency: 0.5, + numberOfParticles: 15, + particleDrag: 0.1, + colors: const [ + Colors.red, + Colors.orange, + Colors.yellow, + Colors.green, + Colors.blue, + Colors.purple, + Colors.pink, + Colors.cyan, + ], + createParticlePath: (size) { + double degToRad(double deg) => deg * (pi / 180.0); + + const numberOfPoints = 5; + final halfWidth = size.width / 2; + final externalRadius = halfWidth; + final internalRadius = halfWidth / 2.5; + final degreesPerStep = degToRad(360 / numberOfPoints); + final halfDegreesPerStep = degreesPerStep / 2; + final path = Path(); + final fullAngle = degToRad(360); + path.moveTo(size.width, halfWidth); + + for (double step = 0; step < fullAngle; step += degreesPerStep) { + path.lineTo( + halfWidth + externalRadius * cos(step), + halfWidth + externalRadius * sin(step), + ); + path.lineTo( + halfWidth + internalRadius * cos(step + halfDegreesPerStep), + halfWidth + internalRadius * sin(step + halfDegreesPerStep), + ); + } + path.close(); + return path; + }, + ); + } +} diff --git a/lib/core/widgets/dialog/about_us_dialog.dart b/lib/core/widgets/dialog/about_us_dialog.dart new file mode 100644 index 0000000..4992978 --- /dev/null +++ b/lib/core/widgets/dialog/about_us_dialog.dart @@ -0,0 +1,110 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_background.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; + +Future showAboutUsDialog({required BuildContext context}) async { + await showDialog( + context: context, + builder: (context) => AboutUsDialog(), + barrierColor: MyColors.purple.withValues(alpha: 0.82), + useSafeArea: false, + ); +} + +class AboutUsDialog extends StatelessWidget { + const AboutUsDialog({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: MyColors.transparent, + body: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 6, sigmaY: 6), + child: Center( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: setSize( + context: context, + mobile: 18, + tablet: 160, + ) ?? 0, + ), + child: Stack( + clipBehavior: Clip.none, + children: [ + DialogBackground( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + context.translate.about_us, + style: MYTextStyle.titr3.copyWith( + color: Color(0XFF322386), + ), + ), + Text( + context.translate.about_us_desc, + style: MYTextStyle.matn1.copyWith( + color: Color(0XFF494178), + ), + ), + MyImage( + image: MyAssets.newHorizon, + ), + MyImage( + image: MyAssets.khadijeLogo, + size: 100, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + spacing: 20, + children: [ + MyImage( + image: MyAssets.facebook, + size: setSize(context: context, mobile: 33, tablet: 46), + ), + MyImage( + image: MyAssets.instagram, + size: setSize(context: context, mobile: 33, tablet: 46), + ), + MyImage( + image: MyAssets.whatsapp, + size: setSize(context: context, mobile: 33, tablet: 46), + ), + MyImage( + image: MyAssets.youtube, + size: setSize(context: context, mobile: 33, tablet: 46), + ), + ], + ), + ], + ), + ), + Positioned( + right: setSize(context: context, mobile: 30, tablet: 40), + top: setSize(context: context, mobile: -12, tablet: -20), + child: MyInkwell( + onTap: context.pop, + child: MyImage( + image: MyAssets.closeBtn, + size: setSize(context: context, mobile: 40, tablet: 60), + ), + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/core/widgets/dialog/exit_dialog.dart b/lib/core/widgets/dialog/exit_dialog.dart new file mode 100644 index 0000000..9d4a7bf --- /dev/null +++ b/lib/core/widgets/dialog/exit_dialog.dart @@ -0,0 +1,104 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_background.dart'; +import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_button.dart'; + +Future showExitDialog({required BuildContext context}) async { + await showDialog( + context: context, + builder: (context) => ExitDialog(), + barrierColor: MyColors.purple.withValues(alpha: 0.82), + useSafeArea: false, + ); +} + +class ExitDialog extends StatelessWidget { + const ExitDialog({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: MyColors.transparent, + body: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 6, sigmaY: 6), + child: Center( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: setSize(context: context, mobile: 18, tablet: 160) ?? 0, + ), + child: DialogBackground( + height: 260, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + context.translate.want_to_exit, + style: MYTextStyle.titr0.copyWith(color: Color(0XFF322386)), + ), + Text( + context.translate.exit_dialog_desc, + style: MYTextStyle.titr3.copyWith(color: Color(0XFF6272A9)), + textAlign: TextAlign.center, + ), + Row( + spacing: MySpaces.s20, + children: [ + Expanded( + child: DialogButton( + onTap: () { + context.pop(); + }, + height: 72, + color: Color(0XFFC0BDD3), + child: Text( + context.translate.cancel, + style: MYTextStyle.button2.copyWith( + shadows: [ + BoxShadow( + color: Color(0XFF9895AE), + offset: Offset(0, 3.32), + ), + ], + ), + ), + ), + ), + Expanded( + child: DialogButton( + onTap: () { + SystemNavigator.pop(); + }, + height: 72, + color: Color(0XFFD42427), + child: Text( + context.translate.exit, + style: MYTextStyle.button2.copyWith( + shadows: [ + BoxShadow( + color: Color(0XFFC82020), + offset: Offset(0, 3.32), + ), + ], + ), + ), + ), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/core/widgets/dialog/hadith_dialog.dart b/lib/core/widgets/dialog/hadith_dialog.dart new file mode 100644 index 0000000..0191fce --- /dev/null +++ b/lib/core/widgets/dialog/hadith_dialog.dart @@ -0,0 +1,112 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_background.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/hadith_entity.dart'; + +Future showHadithDialog({ + required BuildContext context, + required List hadith, +}) async { + await showDialog( + context: context, + builder: (context) => HadithDialog(hadith: hadith), + barrierColor: MyColors.purple.withValues(alpha: 0.82), + useSafeArea: false, + ); +} + +class HadithDialog extends StatelessWidget { + const HadithDialog({super.key, required this.hadith}); + + final List hadith; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: MyColors.transparent, + body: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 6, sigmaY: 6), + child: Center( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: setSize( + context: context, + mobile: 18, + tablet: 120, + ) ?? 0, + ), + child: Stack( + clipBehavior: Clip.none, + children: [ + DialogBackground( + child: Builder( + builder: (context) { + if(hadith.isNotEmpty){ + return ListView.separated( + itemCount: hadith.length, + separatorBuilder: (context, index) => Divider( + height: 40, + thickness: 1, + endIndent: MySpaces.s20, + indent: MySpaces.s20, + color: Color(0xFFC2BDE4), + ), + itemBuilder: (context, index) => Text.rich( + TextSpan( + text: '${hadith[index].narratorName ?? ''}:\n', + style: MYTextStyle.titr1.copyWith( + color: Color(0XFF494178), + ), + children: [ + TextSpan( + text: hadith[index].hadithText, + style: MYTextStyle.matn1.copyWith( + color: Color(0XFF494178), + ), + ), + ], + ), + ), + ); + } else { + return Center( + child: Text( + context.translate.no_hadith, + style: MYTextStyle.titr4.copyWith( + color: Color(0XFF494178), + ), + ), + ); + } + }, + ), + ), + PositionedDirectional( + end: setSize(context: context, mobile: 30, tablet: 40), + top: -12, + child: GestureDetector( + onTap: context.pop, + behavior: HitTestBehavior.opaque, + child: MyImage( + image: MyAssets.closeBtn, + size: setSize(context: context, mobile: 40, tablet: 60), + ), + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/core/widgets/dialog/styles/dialog_background.dart b/lib/core/widgets/dialog/styles/dialog_background.dart new file mode 100644 index 0000000..099be2f --- /dev/null +++ b/lib/core/widgets/dialog/styles/dialog_background.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; + +class DialogBackground extends StatelessWidget { + const DialogBackground({ + super.key, + this.child, + this.height = 525, + }); + + final Widget? child; + final double height; + + @override + Widget build(BuildContext context) { + return ClipPath( + clipper: _BottomShapeClipper(), + child: Container( + width: context.widthScreen, + height: height, + padding: EdgeInsets.symmetric( + vertical: MySpaces.s30, + horizontal: setSize(context: context, mobile: MySpaces.s30, tablet: 60) ?? 0, + ), + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment.bottomCenter, + end: Alignment.topCenter, + colors: [ + Color(0xFFCADCFF), + Colors.white, + Colors.white, + Colors.white, + ], + ), + ), + child: child, + ), + ); + } +} + +class _BottomShapeClipper extends CustomClipper { + @override + Path getClip(Size size) { + final path = Path(); + path.moveTo(size.width * 0.0296831, size.height * 0.0431190); + path.cubicTo( + size.width * -0.0046256, + size.height * 0.0736941, + size.width * -0.0099023, + size.height * 0.932004, + size.width * 0.0201127, + size.height * 0.971318, + ); + path.cubicTo( + size.width * 0.0476063, + size.height * 1.00783, + size.width * 0.908328, + size.height * 1.01074, + size.width * 0.962267, + size.height * 0.972775, + ); + path.cubicTo( + size.width * 1.01620, + size.height * 0.934810, + size.width * 1.00525, + size.height * 0.0573423, + size.width * 0.955130, + size.height * 0.0222874, + ); + path.cubicTo( + size.width * 0.905007, + size.height * -0.0127694, + size.width * 0.0857731, + size.height * -0.0135838, + size.width * 0.0296831, + size.height * 0.0431190, + ); + path.close(); + return path; + } + + @override + bool shouldReclip(CustomClipper oldClipper) { + return true; + } +} diff --git a/lib/core/widgets/dialog/styles/dialog_button.dart b/lib/core/widgets/dialog/styles/dialog_button.dart new file mode 100644 index 0000000..ef3a819 --- /dev/null +++ b/lib/core/widgets/dialog/styles/dialog_button.dart @@ -0,0 +1,82 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; + +class DialogButton extends StatelessWidget { + const DialogButton({ + super.key, + this.color, + this.height = 72.0, + this.child, + this.onTap, + }); + + final Color? color; + final double height; + final Widget? child; + final VoidCallback? onTap; + + @override + Widget build(BuildContext context) { + return ClipPath( + clipper: ButtonDialogClipper(), + child: Material( + type: MaterialType.transparency, + child: MyInkwell( + onTap: onTap, + child: Ink( + height: height, + color: color, + child: Center( + child: child, + ), + ), + ), + ), + ); + } +} + + + +class ButtonDialogClipper extends CustomClipper { + @override + Path getClip(Size size) { + final path = Path(); + path.moveTo(size.width * 0.01841077, size.height * 0.8753694); + path.cubicTo( + size.width * 0.05368083, + size.height * 1.03396, + size.width * 0.888405, + size.height * 1.04665, + size.width * 0.961125, + size.height * 0.881918); + path.cubicTo( + size.width * 1.02749, + size.height * 0.732121, + size.width * 1.00029, + size.height * 0.195965, + size.width * 0.943774, + size.height * 0.0891425); + path.cubicTo( + size.width * 0.866786, + size.height * -0.0565611, + size.width * 0.122135, + size.height * -0.00478720, + size.width * 0.0598435, + size.height * 0.109607); + path.cubicTo( + size.width * 0.00172381, + size.height * 0.216429, + size.width * -0.0181157, + size.height * 0.711249, + size.width * 0.01841077, + size.height * 0.8753694); + path.close(); + return path; + } + + @override + bool shouldReclip(CustomClipper oldClipper) { + return true; + } +} \ No newline at end of file diff --git a/lib/core/widgets/error/error_state.dart b/lib/core/widgets/error/error_state.dart new file mode 100644 index 0000000..2d6244f --- /dev/null +++ b/lib/core/widgets/error/error_state.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/gap.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/button/my_blue_button.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; + +class ErrorState extends StatelessWidget { + const ErrorState({super.key, this.onTap}); + + final VoidCallback? onTap; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Spacer(), + Text( + context.translate.lost_connection, + style: MYTextStyle.button1, + ), + MyImage(image: MyAssets.error), + MySpaces.s40.gapHeight, + Text( + context.translate.connected_to_internet, + textAlign: TextAlign.center, + style: MYTextStyle.matn3, + ), + Spacer(), + MyBlueButton( + title: context.translate.retry, + onTap: onTap, + top: setSize(context: context, mobile: MySpaces.s6, tablet: MySpaces.s16), + ), + ], + ); + } +} diff --git a/lib/core/widgets/images/my_image.dart b/lib/core/widgets/images/my_image.dart new file mode 100644 index 0000000..b3b8cd8 --- /dev/null +++ b/lib/core/widgets/images/my_image.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:vector_graphics/vector_graphics.dart'; + +class MyImage extends StatelessWidget { + const MyImage({ + super.key, + required this.image, + this.fit, + this.size, + this.color, + }); + + final String image; + final BoxFit? fit; + final double? size; + final Color? color; + + @override + Widget build(BuildContext context) { + if (image.endsWith('.png') || image.endsWith('.jpg')) { + return Image( + image: AssetImage(image), + fit: fit, + width: size, + height: size, + ); + } else { + return VectorGraphic( + loader: AssetBytesLoader(image), + fit: fit ?? BoxFit.contain, + width: size, + height: size, + colorFilter: color != null + ? ColorFilter.mode(color!, BlendMode.srcIn) + : null, + ); + } + } +} diff --git a/lib/core/widgets/inkwell/my_inkwell.dart b/lib/core/widgets/inkwell/my_inkwell.dart new file mode 100644 index 0000000..9901be7 --- /dev/null +++ b/lib/core/widgets/inkwell/my_inkwell.dart @@ -0,0 +1,57 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/services/audio_service.dart'; +import 'package:hadi_hoda_flutter/init_bindings.dart'; + +class MyInkwell extends StatefulWidget { + const MyInkwell({ + super.key, + this.onTap, + this.child, + this.borderRadius, + this.highlightColor, + this.splashColor, + this.audio, + }); + + final VoidCallback? onTap; + final Widget? child; + final BorderRadius? borderRadius; + final Color? highlightColor; + final Color? splashColor; + final String? audio; + + @override + State createState() => _MyInkwellState(); +} + +class _MyInkwellState extends State { + final AudioService audioService = locator( + instanceName: MyConstants.effectAudioService, + ); + + @override + void initState() { + super.initState(); + } + + void playAudio() { + audioService.setAudio(assetPath: widget.audio ?? MyAudios.clickButton); + audioService.play(); + } + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + playAudio(); + widget.onTap?.call(); + }, + borderRadius: widget.borderRadius, + highlightColor: widget.highlightColor, + splashColor: widget.splashColor, + child: widget.child, + ); + } +} diff --git a/lib/core/widgets/pop_scope/my_pop_scope.dart b/lib/core/widgets/pop_scope/my_pop_scope.dart new file mode 100644 index 0000000..96b98da --- /dev/null +++ b/lib/core/widgets/pop_scope/my_pop_scope.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/core/widgets/dialog/exit_dialog.dart'; + +class MyPopScope extends StatelessWidget { + const MyPopScope({super.key, required this.child}); + + final Widget child; + + void onPopInvokedWithResult( + bool didPop, + dynamic result, + BuildContext context, + ) { + showExitDialog(context: context); + } + + @override + Widget build(BuildContext context) { + return PopScope( + canPop: false, + onPopInvokedWithResult: (didPop, result) => + onPopInvokedWithResult(didPop, result, context), + child: child, + ); + } +} diff --git a/lib/core/widgets/showcase/my_showcase_widget.dart b/lib/core/widgets/showcase/my_showcase_widget.dart new file mode 100644 index 0000000..afd7062 --- /dev/null +++ b/lib/core/widgets/showcase/my_showcase_widget.dart @@ -0,0 +1,161 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/widgets/button/my_white_button.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; +import 'package:showcaseview/showcaseview.dart'; + +enum ShowcaseTooltipType { + bottom, + top, + topLeft; + + static Map toolTipAction({String? description}) => { + ShowcaseTooltipType.bottom: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + spacing: MySpaces.s4, + children: [ + MyImage( + image: MyAssets.handPoint, + size: 50, + ), + Text( + description ?? '', + style: MYTextStyle.titr4, + textAlign: TextAlign.center, + ), + ], + ), + ShowcaseTooltipType.top: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + spacing: MySpaces.s4, + children: [ + Text( + description ?? '', + style: MYTextStyle.titr4, + textAlign: TextAlign.center, + ), + Transform.flip( + flipY: true, + flipX: true, + child: MyImage( + image: MyAssets.handPoint, + size: 50, + ), + ), + ], + ), + ShowcaseTooltipType.topLeft: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + spacing: MySpaces.s4, + children: [ + Text( + description ?? '', + style: MYTextStyle.titr4, + textAlign: TextAlign.center, + ), + Transform.rotate( + angle: 2.5, + child: MyImage( + image: MyAssets.handPoint, + size: 50, + ), + ), + ], + ), + }; + + static Map get toolTipPosition => { + ShowcaseTooltipType.bottom: TooltipPosition.bottom, + ShowcaseTooltipType.top: TooltipPosition.top, + ShowcaseTooltipType.topLeft: TooltipPosition.top, + }; +} + +class MyShowcaseWidget extends StatelessWidget { + const MyShowcaseWidget({ + super.key, + required this.globalKey, + required this.child, + this.description, + this.type = ShowcaseTooltipType.bottom, + }); + + final GlobalKey globalKey; + final String? description; + final Widget child; + final ShowcaseTooltipType type; + + @override + Widget build(BuildContext context) { + return Showcase( + key: globalKey, + disableBarrierInteraction: false, + targetShapeBorder: CircleBorder(), + overlayColor: Color(0XFF0F0041), + overlayOpacity: 0.82, + /// ToolTip + tooltipPadding: EdgeInsets.zero, + tooltipBackgroundColor: MyColors.transparent, + tooltipPosition: ShowcaseTooltipType.toolTipPosition[type], + targetTooltipGap: 0, + toolTipSlideEndDistance: MySpaces.s6, + toolTipMargin: 0, + tooltipActionConfig: TooltipActionConfig( + gapBetweenContentAndAction: 0, + ), + tooltipActions: [ + TooltipActionButton.custom( + button: ShowcaseTooltipType.toolTipAction( + description: description)[type], + ), + ], + /// Floating action + floatingActionWidget: FloatingActionWidget( + bottom: type == ShowcaseTooltipType.bottom ? MySpaces.s40 : null, + top: type == ShowcaseTooltipType.bottom ? null : 44, + left: MySpaces.s16, + right: MySpaces.s16, + child: Row( + children: [ + Expanded( + child: MyInkwell( + onTap: () { + ShowcaseView.get().unregister(); + }, + splashColor: MyColors.transparent, + highlightColor: MyColors.transparent, + child: Container( + height: 50, + alignment: Alignment.center, + child: Text( + context.translate.skip, + style: MYTextStyle.button2, + ), + ), + ), + ), + Expanded( + child: MyWhiteButton( + title: context.translate.next, + onTap: () { + ShowcaseView.get().next(); + }, + ), + ), + ], + ), + ), + /// title & Child + description: '', + child: child, + ); + } +} diff --git a/lib/features/app/presentation/bloc/app_bloc.dart b/lib/features/app/presentation/bloc/app_bloc.dart new file mode 100644 index 0000000..def780c --- /dev/null +++ b/lib/features/app/presentation/bloc/app_bloc.dart @@ -0,0 +1,40 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_event.dart'; +import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_state.dart'; +import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; + +class AppBloc extends Bloc { + /// ------------constructor------------ + AppBloc() : super(const AppState()) { + on(_initLocaleEvent); + on(_changeLocaleEvent); + } + + /// ------------UseCases------------ + + /// ------------Variables------------ + + /// ------------Controllers------------ + + /// ------------Functions------------ + + + /// ------------Event Calls------------ + FutureOr _initLocaleEvent(InitLocaleEvent event, + Emitter emit) { + final String selectLanguage = LocalStorage.readData(key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; + final LanguageEntity findLanguage = MyConstants.languages.singleWhere( + (e) => e.code == selectLanguage, + ); + emit(state.copyWith(locale: findLanguage.locale)); + } + + FutureOr _changeLocaleEvent(ChangeLocaleEvent event, + Emitter emit) { + emit(state.copyWith(locale: event.locale)); + } +} diff --git a/lib/features/app/presentation/bloc/app_event.dart b/lib/features/app/presentation/bloc/app_event.dart new file mode 100644 index 0000000..e17c4f4 --- /dev/null +++ b/lib/features/app/presentation/bloc/app_event.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; + +sealed class AppEvent { + const AppEvent(); +} + +class InitLocaleEvent extends AppEvent {} + +class ChangeLocaleEvent extends AppEvent { + final Locale locale; + const ChangeLocaleEvent(this.locale); +} diff --git a/lib/features/app/presentation/bloc/app_state.dart b/lib/features/app/presentation/bloc/app_state.dart new file mode 100644 index 0000000..0b4a664 --- /dev/null +++ b/lib/features/app/presentation/bloc/app_state.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; + +class AppState { + final Locale locale; + + const AppState({this.locale = const Locale('en', 'US')}); + + AppState copyWith({Locale? locale}) { + return AppState(locale: locale ?? this.locale); + } +} diff --git a/lib/features/download/data/datasource/download_datasource.dart b/lib/features/download/data/datasource/download_datasource.dart new file mode 100644 index 0000000..587574d --- /dev/null +++ b/lib/features/download/data/datasource/download_datasource.dart @@ -0,0 +1,159 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter_archive/flutter_archive.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_api.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/network/http_request.dart'; +import 'package:hadi_hoda_flutter/core/response/base_response.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/storage_path.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/data/model/level_model.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart'; +import 'package:hive/hive.dart'; + +abstract class IDownloadDatasource { + Future getImages(); + Future getAudios(); + Future saveLevels(); + Stream loadingStream(); +} + +class DownloadDatasourceImpl implements IDownloadDatasource { + final IHttpRequest httpRequest; + final StreamController streamController = StreamController.broadcast(); + + DownloadDatasourceImpl(this.httpRequest); + + @override + Future getImages() async { + final String filePath = '${StoragePath.documentDir.path}/images.zip'; + + if (LocalStorage.readData(key: MyConstants.downloadedImage) != 'true') { + await httpRequest.download( + urlPath: MyApi.images, + savePath: filePath, + onReceive: (count, total) { + streamController.add(DownloadEntity( + count: count / 1, + total: total / 1, + percent: (count / total) * 100, + )); + }, + ).then((value) async { + await LocalStorage.saveData( + key: MyConstants.downloadedImage, + value: 'true', + ); + }); + } + + try{ + if (LocalStorage.readData(key: MyConstants.extractedImage) != 'true') { + final File file = File(filePath); + final Directory directory = Directory('${StoragePath.documentDir.path}/'); + await ZipFile.extractToDirectory( + zipFile: file, + destinationDir: directory, + onExtracting: (zipEntry, progress) { + return ZipFileOperation.includeItem; + }, + ).then((value) async { + await Future.wait([ + LocalStorage.saveData( + key: MyConstants.extractedImage, + value: 'true', + ), + file.delete(recursive: true), + ]); + }); + } + } catch (e){ + throw MyException(errorMessage: '$e'); + } + } + + @override + Future getAudios() async { + final String filePath = '${StoragePath.documentDir.path}/audios.zip'; + final String selectedLanguage = + LocalStorage.readData(key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; + + if(LocalStorage.readData(key: MyConstants.downloadedAudio) != 'true'){ + await httpRequest.download( + urlPath: MyApi.audios, + savePath: filePath, + queryParameters: { + 'lang': selectedLanguage, + }, + onReceive: (count, total) { + streamController.add(DownloadEntity( + count: count / 1, + total: total / 1, + percent: (count / total) * 100, + )); + }, + ).then((value) async { + await LocalStorage.saveData( + key: MyConstants.downloadedAudio, + value: 'true', + ); + }); + } + + try{ + if (LocalStorage.readData(key: MyConstants.extractedAudio) != 'true') { + final File file = File(filePath); + final Directory directory = Directory( + '${StoragePath.documentDir.path}/$selectedLanguage/', + ); + await ZipFile.extractToDirectory( + zipFile: file, + destinationDir: directory, + onExtracting: (zipEntry, progress) { + return ZipFileOperation.includeItem; + }, + ).then((value) async { + await Future.wait([ + LocalStorage.saveData( + key: MyConstants.extractedAudio, + value: 'true', + ), + file.delete(recursive: true), + ]); + }); + } + } catch (e){ + throw MyException(errorMessage: '$e'); + } + } + + @override + Future saveLevels() async { + final String selectedLanguage = + LocalStorage.readData(key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; + final Box data = Hive.box(MyConstants.levelBox); + final TotalDataEntity findData = data.values.singleWhere( + (e) => e.code == selectedLanguage, + orElse: () => TotalDataEntity(), + ); + + if (findData.code != selectedLanguage) { + final response = await httpRequest.get( + path: MyApi.levels, + queryParameters: {'lang': selectedLanguage}, + ); + final List levels = BaseResponse.getDataList( + response?['result'], + (json) => LevelModel.fromJson(json), + ); + await data.add(TotalDataEntity(code: selectedLanguage, levels: levels)); + } + } + + @override + Stream loadingStream() => streamController.stream; +} diff --git a/lib/features/download/data/repository_impl/download_repository_impl.dart b/lib/features/download/data/repository_impl/download_repository_impl.dart new file mode 100644 index 0000000..13917f6 --- /dev/null +++ b/lib/features/download/data/repository_impl/download_repository_impl.dart @@ -0,0 +1,66 @@ +import 'package:flutter/foundation.dart'; +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/no_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/download/data/datasource/download_datasource.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/repository/download_repository.dart'; + +class DownloadRepositoryImpl implements IDownloadRepository { + final IDownloadDatasource datasource; + + const DownloadRepositoryImpl(this.datasource); + + @override + Future> getImages() async { + try { + await datasource.getImages(); + return DataState.success(NoParams()); + } on MyException catch (e) { + return DataState.error(e); + } catch (e) { + if (kDebugMode) { + rethrow; + } else { + return DataState.error(MyException(errorMessage: '$e')); + } + } + } + + @override + Future> getAudios() async { + try { + await datasource.getAudios(); + return DataState.success(NoParams()); + } on MyException catch (e) { + return DataState.error(e); + } catch (e) { + if (kDebugMode) { + rethrow; + } else { + return DataState.error(MyException(errorMessage: '$e')); + } + } + } + + @override + Future> saveLevels() async { + try { + await datasource.saveLevels(); + return DataState.success(NoParams()); + } on MyException catch (e) { + return DataState.error(e); + } catch (e) { + if (kDebugMode) { + rethrow; + } else { + return DataState.error(MyException(errorMessage: '$e')); + } + } + } + + @override + Stream loadingStream() { + return datasource.loadingStream(); + } +} diff --git a/lib/features/download/domain/entities/download_entity.dart b/lib/features/download/domain/entities/download_entity.dart new file mode 100644 index 0000000..589fd5a --- /dev/null +++ b/lib/features/download/domain/entities/download_entity.dart @@ -0,0 +1,7 @@ +class DownloadEntity { + final double? count; + final double? total; + final double? percent; + + const DownloadEntity({this.count, this.total, this.percent}); +} diff --git a/lib/features/download/domain/repository/download_repository.dart b/lib/features/download/domain/repository/download_repository.dart new file mode 100644 index 0000000..ab53e49 --- /dev/null +++ b/lib/features/download/domain/repository/download_repository.dart @@ -0,0 +1,11 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/no_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; + +abstract class IDownloadRepository { + Future> getImages(); + Future> getAudios(); + Future> saveLevels(); + Stream loadingStream(); +} diff --git a/lib/features/download/domain/usecases/get_audios_usecase.dart b/lib/features/download/domain/usecases/get_audios_usecase.dart new file mode 100644 index 0000000..a113927 --- /dev/null +++ b/lib/features/download/domain/usecases/get_audios_usecase.dart @@ -0,0 +1,16 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/no_params.dart'; +import 'package:hadi_hoda_flutter/core/usecase/usecase.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/repository/download_repository.dart'; + +class GetAudiosUseCase implements UseCase { + final IDownloadRepository repository; + + const GetAudiosUseCase(this.repository); + + @override + Future> call(NoParams params) { + return repository.getAudios(); + } +} diff --git a/lib/features/download/domain/usecases/get_images_usecase.dart b/lib/features/download/domain/usecases/get_images_usecase.dart new file mode 100644 index 0000000..f91e1d6 --- /dev/null +++ b/lib/features/download/domain/usecases/get_images_usecase.dart @@ -0,0 +1,16 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/no_params.dart'; +import 'package:hadi_hoda_flutter/core/usecase/usecase.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/repository/download_repository.dart'; + +class GetImagesUseCase implements UseCase { + final IDownloadRepository repository; + + const GetImagesUseCase(this.repository); + + @override + Future> call(NoParams params) { + return repository.getImages(); + } +} diff --git a/lib/features/download/domain/usecases/loading_stream_usecase.dart b/lib/features/download/domain/usecases/loading_stream_usecase.dart new file mode 100644 index 0000000..cb0fa54 --- /dev/null +++ b/lib/features/download/domain/usecases/loading_stream_usecase.dart @@ -0,0 +1,12 @@ +import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/repository/download_repository.dart'; + +class LoadingStreamUseCase { + final IDownloadRepository repository; + + const LoadingStreamUseCase(this.repository); + + Stream call() { + return repository.loadingStream(); + } +} diff --git a/lib/features/download/domain/usecases/save_levels_usecase.dart b/lib/features/download/domain/usecases/save_levels_usecase.dart new file mode 100644 index 0000000..034e60a --- /dev/null +++ b/lib/features/download/domain/usecases/save_levels_usecase.dart @@ -0,0 +1,16 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/no_params.dart'; +import 'package:hadi_hoda_flutter/core/usecase/usecase.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/repository/download_repository.dart'; + +class SaveLevelsUseCase implements UseCase { + final IDownloadRepository repository; + + const SaveLevelsUseCase(this.repository); + + @override + Future> call(NoParams params) { + return repository.saveLevels(); + } +} diff --git a/lib/features/download/presentation/bloc/download_bloc.dart b/lib/features/download/presentation/bloc/download_bloc.dart new file mode 100644 index 0000000..4c94b16 --- /dev/null +++ b/lib/features/download/presentation/bloc/download_bloc.dart @@ -0,0 +1,99 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/params/no_params.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_audios_usecase.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_images_usecase.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/loading_stream_usecase.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/save_levels_usecase.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_event.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_state.dart'; + +class DownloadBloc extends Bloc { + /// ------------constructor------------ + DownloadBloc( + this._getImagesUseCase, + this._getAudiosUseCase, + this._loadingStreamUseCase, + this._saveLevelsUseCase, + ) + : super(const DownloadState()) { + on(_getImagesEvent); + on(_getAudiosEvent); + on(_saveLevelsEvent); + loadingStream = _loadingStreamUseCase(); + } + + /// ------------UseCases------------ + final GetImagesUseCase _getImagesUseCase; + final GetAudiosUseCase _getAudiosUseCase; + final SaveLevelsUseCase _saveLevelsUseCase; + final LoadingStreamUseCase _loadingStreamUseCase; + + /// ------------Variables------------ + Stream loadingStream = Stream.empty(); + + /// ------------Controllers------------ + + /// ------------Functions------------ + + /// ------------Api Calls------------ + FutureOr _getImagesEvent( + GetImagesEvent event, + Emitter emit, + ) async { + emit(state.copyWith(getFilesStatus: BaseInit())); + await _getImagesUseCase(NoParams()).then((value) { + value.fold( + (data) { + add(GetAudiosEvent()); + }, + (error) async { + emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); + }, + ); + }); + } + + FutureOr _getAudiosEvent( + GetAudiosEvent event, + Emitter emit, + ) async { + await _getAudiosUseCase(NoParams()).then((value) { + value.fold( + (data) async { + add(SaveLevelsEvent()); + }, + (error) async { + emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); + }, + ); + }); + } + + FutureOr _saveLevelsEvent( + SaveLevelsEvent event, + Emitter emit, + ) async { + await _saveLevelsUseCase(NoParams()).then((value) => + value.fold( + (data) async { + await LocalStorage.saveData(key: MyConstants.firstDownload, value: 'true'); + if(MyContext.get.mounted){ + MyContext.get.goNamed(Routes.introPage); + } + }, + (error) { + emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); + }, + ), + ); + } +} diff --git a/lib/features/download/presentation/bloc/download_event.dart b/lib/features/download/presentation/bloc/download_event.dart new file mode 100644 index 0000000..ec62661 --- /dev/null +++ b/lib/features/download/presentation/bloc/download_event.dart @@ -0,0 +1,6 @@ +sealed class DownloadEvent { + const DownloadEvent(); +} +class GetImagesEvent extends DownloadEvent {} +class GetAudiosEvent extends DownloadEvent {} +class SaveLevelsEvent extends DownloadEvent {} diff --git a/lib/features/download/presentation/bloc/download_state.dart b/lib/features/download/presentation/bloc/download_state.dart new file mode 100644 index 0000000..6ed7abc --- /dev/null +++ b/lib/features/download/presentation/bloc/download_state.dart @@ -0,0 +1,15 @@ +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; + +class DownloadState { + final BaseStatus getFilesStatus; + + const DownloadState({this.getFilesStatus = const BaseInit()}); + + DownloadState copyWith({ + BaseStatus? getFilesStatus, + }) { + return DownloadState( + getFilesStatus: getFilesStatus ?? this.getFilesStatus, + ); + } +} diff --git a/lib/features/download/presentation/ui/download_page.dart b/lib/features/download/presentation/ui/download_page.dart new file mode 100644 index 0000000..7efeedd --- /dev/null +++ b/lib/features/download/presentation/ui/download_page.dart @@ -0,0 +1,124 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/core/utils/convert_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/error/error_state.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_bloc.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_event.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_state.dart'; +import 'package:hadi_hoda_flutter/features/download/presentation/ui/widgets/download_loading_widget.dart'; + +class DownloadPage extends StatelessWidget { + const DownloadPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + height: context.heightScreen, + width: context.widthScreen, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFF00154C), + Color(0XFF150532), + ], + ), + image: DecorationImage( + image: AssetImage(MyAssets.pattern), + scale: 3, + repeat: ImageRepeat.repeat, + colorFilter: ColorFilter.mode( + Colors.white.withValues(alpha: 0.2), + BlendMode.srcIn, + ), + ), + ), + child: BlocBuilder( + buildWhen: (previous, current) => + previous.getFilesStatus != current.getFilesStatus, + builder: (context, state) { + if (state.getFilesStatus is BaseError) { + return Padding( + padding: EdgeInsets.symmetric( + vertical: MediaQuery.viewPaddingOf(context).bottom + MySpaces.s16, + horizontal: 60, + ), + child: ErrorState( + onTap: () => context.read().add(GetImagesEvent()), + ), + ); + } else { + return Stack( + alignment: Alignment.center, + children: [ + _image(), + _text(context), + _loading(context), + ], + ); + } + } + ), + ), + ); + } + + Widget _image() { + return Stack( + children: [ + MyImage( + image: MyAssets.hadiHoda, + ), + PositionedDirectional( + start: MySpaces.s10, + top: MySpaces.s40, + child: MyImage( + image: MyAssets.globe, + ), + ), + ], + ); + } + + Widget _text(BuildContext context) { + return PositionedDirectional( + bottom: 130, + child: Column( + spacing: MySpaces.s6, + children: [ + Text( + context.translate.please_wait, + style: MYTextStyle.titr0, + ), + StreamBuilder( + initialData: DownloadEntity(), + stream: context.read().loadingStream, + builder: (context, snapshot) => Text( + '${context.translate.downloading_data} (${snapshot.data?.count.toMB ?? 0.0}mb / ${snapshot.data?.total.toMB ?? 0.0}mb)', + style: MYTextStyle.matn3, + ), + ), + ], + ), + ); + } + + Positioned _loading(BuildContext context) { + return Positioned( + bottom: MySpaces.s40, + child: DownloadLoadingWidget( + loadingStream: context.read().loadingStream, + ), + ); + } +} diff --git a/lib/features/download/presentation/ui/widgets/download_loading_widget.dart b/lib/features/download/presentation/ui/widgets/download_loading_widget.dart new file mode 100644 index 0000000..933eb13 --- /dev/null +++ b/lib/features/download/presentation/ui/widgets/download_loading_widget.dart @@ -0,0 +1,136 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; + + +class DownloadLoadingWidget extends StatelessWidget { + const DownloadLoadingWidget({ + super.key, + this.loadingStream, + }); + + final Stream? loadingStream; + + @override + Widget build(BuildContext context) { + return ClipPath( + clipper: BubbleClip(), + child: Container( + width: 300, + height: 60, + padding: EdgeInsets.symmetric( + vertical: MySpaces.s4, + horizontal: MySpaces.s2, + ), + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment(0, 1), // bottom + end: Alignment(0, -1), // top + colors: [ + Color(0xFFCADCFF), // #CADCFF + Colors.white, // #FFFFFF + ], + ), + ), + child: StreamBuilder( + initialData: DownloadEntity(), + stream: loadingStream, + builder: (context, snapshot) { + return Row( + children: [ + Expanded( + flex: 85, + child: ClipPath( + clipper: BubbleClip(), + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + padding: EdgeInsetsDirectional.only( + end: 260 - ((snapshot.data?.percent ?? 0) * 260 / 100), + ), + decoration: BoxDecoration( + color: Color(0xFF1F59BD).withValues(alpha: 0.25), + ), + child: ClipPath( + clipper: BubbleClip(), + child: Container( + decoration: BoxDecoration( + gradient: RadialGradient( + radius: 2, + colors: [ + Color(0xFFFFBD00), // #CADCFF + Color(0xFFFF772C), // #CADCFF + ], + ), + ), + ), + ), + ), + ), + ), + Expanded( + flex: 15, + child: Center( + child: Text( + '${snapshot.data?.percent?.toInt() ?? 0}%', + style: MYTextStyle.titr4.copyWith( + color: Color(0XFF6E83A8), + ), + ), + ), + ), + ], + ); + } + ), + ), + ); + } +} + +class BubbleClip extends CustomClipper { + @override + Path getClip(Size size) { + // Original SVG viewBox: 334 x 60 + const double w0 = 334.0; + const double h0 = 60.0; + final sx = size.width / w0; + final sy = size.height / h0; + + // SVG path: + // M9.82057 10.3597 + // C -1.70838 17.1589 -3.47995 44.4301 6.60447 53.1719 + // C 16.0075 61.291 305.076 61.9385 323.201 53.4956 + // C 341.326 45.0527 332.116 8.04571 324.829 5.7273 + // C 307.985 -2.06805 28.6539 -0.77294 9.82057 10.3597 + // Z + final p = Path() + ..moveTo(9.82057 * sx, 10.3597 * sy) + ..cubicTo( + -1.70838 * sx, 17.1589 * sy, + -3.47995 * sx, 44.4301 * sy, + 6.60447 * sx, 53.1719 * sy, + ) + ..cubicTo( + 16.0075 * sx, 61.291 * sy, + 305.076 * sx, 61.9385 * sy, + 323.201 * sx, 53.4956 * sy, + ) + ..cubicTo( + 341.326 * sx, 45.0527 * sy, + 332.116 * sx, 8.04571 * sy, + 324.829 * sx, 5.7273 * sy, + ) + ..cubicTo( + 307.985 * sx, -2.06805 * sy, + 28.6539 * sx, -0.77294 * sy, + 9.82057 * sx, 10.3597 * sy, + ) + ..close(); + + return p; + } + + @override + bool shouldReclip(covariant CustomClipper oldClipper) => false; +} diff --git a/lib/features/home/presentation/bloc/home_bloc.dart b/lib/features/home/presentation/bloc/home_bloc.dart new file mode 100644 index 0000000..706dfa9 --- /dev/null +++ b/lib/features/home/presentation/bloc/home_bloc.dart @@ -0,0 +1,77 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/core/services/audio_service.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/widgets/dialog/about_us_dialog.dart'; +import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_event.dart'; +import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_state.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart'; +import 'package:hive/hive.dart'; + +class HomeBloc extends Bloc { + /// ------------constructor------------ + HomeBloc( + this._mainAudioService, + this._effectAudioService, + ) : super(const HomeState()) { + volumeStream = _mainAudioService.volumeStream(); + playMusic(); + on(_getHomeEvent); + } + + /// ------------UseCases------------ + + /// ------------Variables------------ + late final Stream volumeStream; + + /// ------------Controllers------------ + final AudioService _mainAudioService; + final AudioService _effectAudioService; + + /// ------------Functions------------ + void goToLevelPage(BuildContext context){ + final String? selectedLanguage = LocalStorage.readData(key: MyConstants.selectLanguage); + final Box dataBox = Hive.box(MyConstants.levelBox); + final TotalDataEntity findData = dataBox.values.singleWhere( + (e) => e.code == selectedLanguage, + orElse: () => TotalDataEntity(), + ); + if (findData.levels?.isNotEmpty ?? false) { + context.goNamed(Routes.levelPage); + } else { + context.goNamed(Routes.downloadPage); + } + } + + void goToLanguagePage(BuildContext context){ + context.pushNamed(Routes.languagePage); + } + + void showAboutUs(BuildContext context){ + showAboutUsDialog(context: context); + } + + Future changeMute() async { + await Future.wait([ + _mainAudioService.changeMute(), + _effectAudioService.changeMute(), + ]); + } + + Future playMusic() async { + await Future.wait([ + _mainAudioService.setAudio(assetPath: MyAudios.home), + _mainAudioService.setLoopMode(isLoop: true), + ]); + await _mainAudioService.play(); + } + + /// ------------Api Calls------------ + FutureOr _getHomeEvent(event, emit) async {} +} diff --git a/lib/features/home/presentation/bloc/home_event.dart b/lib/features/home/presentation/bloc/home_event.dart new file mode 100644 index 0000000..2dc9c2f --- /dev/null +++ b/lib/features/home/presentation/bloc/home_event.dart @@ -0,0 +1,5 @@ +sealed class HomeEvent { + const HomeEvent(); +} + +class GetHomeEvent extends HomeEvent {} diff --git a/lib/features/home/presentation/bloc/home_state.dart b/lib/features/home/presentation/bloc/home_state.dart new file mode 100644 index 0000000..97a1646 --- /dev/null +++ b/lib/features/home/presentation/bloc/home_state.dart @@ -0,0 +1,15 @@ +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; + +class HomeState { + final BaseStatus getHomeStatus; + + const HomeState({this.getHomeStatus = const BaseInit()}); + + HomeState copyWith({ + BaseStatus? getHomeStatus, + }) { + return HomeState( + getHomeStatus: getHomeStatus ?? this.getHomeStatus, + ); + } +} diff --git a/lib/features/home/presentation/ui/home_page.dart b/lib/features/home/presentation/ui/home_page.dart new file mode 100644 index 0000000..467afec --- /dev/null +++ b/lib/features/home/presentation/ui/home_page.dart @@ -0,0 +1,123 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_down_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/button/my_yellow_button.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; +import 'package:hadi_hoda_flutter/core/widgets/pop_scope/my_pop_scope.dart'; +import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_bloc.dart'; + +class HomePage extends StatelessWidget { + const HomePage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: MyPopScope( + child: DecoratedBox( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage(MyAssets.backgroundHome), + fit: BoxFit.cover, + ), + ), + child: SizedBox.expand( + child: Stack( + alignment: Alignment.center, + children: [ + _music(context), + _image(context), + _bottomBtns(context), + ], + ), + ), + ), + ), + ); + } + + Widget _music(BuildContext context) { + return PositionedDirectional( + top: setPlatform(android: MySpaces.s36, iOS: 50), + end: MySpaces.s16, + child: SlideDownFade( + delay: Duration(milliseconds: 200), + child: StreamBuilder( + initialData: 1, + stream: context.read().volumeStream, + builder: (context, snapshot) => MyInkwell( + onTap: () => context.read().changeMute(), + child: MyImage( + image: snapshot.data == 0 ? MyAssets.musicOff : MyAssets.musicOn, + size: setSize(context: context, tablet: 100), + ), + ), + ), + ), + ); + } + + + Positioned _image(BuildContext context) { + return Positioned( + top: setSize(context: context, mobile: 0.1.h, tablet: 0.15.h), + child: Stack( + children: [ + MyImage( + image: MyAssets.hadiHoda, + ), + PositionedDirectional( + start: MySpaces.s10, + top: MySpaces.s40, + child: MyImage( + image: MyAssets.globe, + ), + ), + ], + ), + ); + } + + Positioned _bottomBtns(BuildContext context) { + return Positioned( + bottom: setPlatform(android: MySpaces.s40, iOS: MySpaces.s0), + left: MySpaces.s16, + right: MySpaces.s16, + child: SafeArea( + child: SlideUpFade( + delay: Duration(milliseconds: 200), + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + MyInkwell( + onTap: () => context.read().goToLanguagePage(context), + child: MyImage( + image: MyAssets.language, + size: setSize(context: context, tablet: 100), + ), + ), + MyYellowButton( + onTap: () => context.read().goToLevelPage(context), + title: context.translate.start, + ), + MyInkwell( + onTap: () => context.read().showAboutUs(context), + child: MyImage( + image: MyAssets.theme, + size: setSize(context: context, tablet: 100), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/features/intro/presentation/bloc/intro_bloc.dart b/lib/features/intro/presentation/bloc/intro_bloc.dart new file mode 100644 index 0000000..986da04 --- /dev/null +++ b/lib/features/intro/presentation/bloc/intro_bloc.dart @@ -0,0 +1,53 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_state.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_1_screen.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_2_screen.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_3_screen.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_4_screen.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_5_screen.dart'; + +class IntroBloc extends Bloc { + /// ------------constructor------------ + IntroBloc() : super(const IntroState()){ + on(_changeIntroEvent); + } + + /// ------------UseCases------------ + + /// ------------Variables------------ + final List intros = [ + Intro1Screen(key: Key('0')), + Intro2Screen(key: Key('1')), + Intro3Screen(key: Key('2')), + Intro4Screen(key: Key('3')), + Intro5Screen(key: Key('4')), + ]; + + /// ------------Controllers------------ + + /// ------------Functions------------ + Future goToLevelPage() async { + await LocalStorage.saveData(key: MyConstants.firstIntro, value: 'true'); + if (MyContext.get.mounted) { + MyContext.get.goNamed(Routes.levelPage); + } + } + + /// ------------Api Calls------------ + FutureOr _changeIntroEvent(ChangeIntroEvent event, Emitter emit) async { + if (state.currentIntro < intros.length - 1) { + emit(state.copyWith(currentIntro: state.currentIntro + 1)); + } else { + goToLevelPage(); + } + } +} diff --git a/lib/features/intro/presentation/bloc/intro_event.dart b/lib/features/intro/presentation/bloc/intro_event.dart new file mode 100644 index 0000000..5a38075 --- /dev/null +++ b/lib/features/intro/presentation/bloc/intro_event.dart @@ -0,0 +1,5 @@ +sealed class IntroEvent { + const IntroEvent(); +} + +class ChangeIntroEvent extends IntroEvent {} diff --git a/lib/features/intro/presentation/bloc/intro_state.dart b/lib/features/intro/presentation/bloc/intro_state.dart new file mode 100644 index 0000000..0181124 --- /dev/null +++ b/lib/features/intro/presentation/bloc/intro_state.dart @@ -0,0 +1,21 @@ +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; + +class IntroState { + final BaseStatus getIntroStatus; + final int currentIntro; + + const IntroState({ + this.getIntroStatus = const BaseInit(), + this.currentIntro = 0, + }); + + IntroState copyWith({ + BaseStatus? getIntroStatus, + int? currentIntro, + }) { + return IntroState( + getIntroStatus: getIntroStatus ?? this.getIntroStatus, + currentIntro: currentIntro ?? this.currentIntro, + ); + } +} diff --git a/lib/features/intro/presentation/ui/intro_page.dart b/lib/features/intro/presentation/ui/intro_page.dart new file mode 100644 index 0000000..2c20d18 --- /dev/null +++ b/lib/features/intro/presentation/ui/intro_page.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_bloc.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_state.dart'; + +class IntroPage extends StatelessWidget { + const IntroPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: SizedBox.expand( + child: GestureDetector( + onTap: () => context.read().add(ChangeIntroEvent()), + child: Stack( + children: [ + _mainScreen(), + _skipButton(context), + ], + ), + ), + ), + ); + } + + BlocBuilder _mainScreen() { + return BlocBuilder( + builder: (context, state) => AnimatedSwitcher( + duration: Duration(milliseconds: 200), + reverseDuration: Duration(milliseconds: 200), + switchInCurve: Curves.linear, + switchOutCurve: Curves.linear, + child: context.read().intros[state.currentIntro], + transitionBuilder: (child, animation) => + FadeTransition(opacity: animation, child: child), + ), + ); + } + + PositionedDirectional _skipButton(BuildContext context) { + return PositionedDirectional( + start: MySpaces.s30, + bottom: MySpaces.s16, + child: TextButton( + onPressed: () => context.read().goToLevelPage(), + style: TextButton.styleFrom( + foregroundColor: MyColors.white.withValues(alpha: 0.7), + ), + child: Text( + context.translate.skip, + style: MYTextStyle.button2.copyWith( + color: MyColors.white.withValues(alpha: 0.7), + ), + ), + ), + ); + } +} diff --git a/lib/features/intro/presentation/ui/screens/intro_1_screen.dart b/lib/features/intro/presentation/ui/screens/intro_1_screen.dart new file mode 100644 index 0000000..7e76806 --- /dev/null +++ b/lib/features/intro/presentation/ui/screens/intro_1_screen.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/widgets/bubble_chat_widget.dart'; + +class Intro1Screen extends StatelessWidget { + const Intro1Screen({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.center, + children: [ + Positioned.fill( + child: MyImage(image: MyAssets.intro_1, fit: BoxFit.cover), + ), + PositionedDirectional( + end: setSize( + context: context, + mobile: MySpaces.s10, + tablet: 0.15.w, + ), + top: setSize( + context: context, + mobile: 0.15.h, + tablet: 0.25.h, + ), + width: 290, + child: SlideUpFade( + delay: Duration(milliseconds: 300), + child: BubbleChatWidget( + text: context.translate.intro_1_1, + flip: true, + ), + ), + ), + PositionedDirectional( + start: setSize(context: context, mobile: MySpaces.s30, tablet: 0.2.w), + top: setSize(context: context, mobile: 0.3.h, tablet: 0.35.h), + width: 250, + child: SlideUpFade( + delay: Duration(milliseconds: 800), + child: BubbleChatWidget(text: context.translate.intro_1_2), + ), + ), + ], + ); + } +} diff --git a/lib/features/intro/presentation/ui/screens/intro_2_screen.dart b/lib/features/intro/presentation/ui/screens/intro_2_screen.dart new file mode 100644 index 0000000..47ed928 --- /dev/null +++ b/lib/features/intro/presentation/ui/screens/intro_2_screen.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/widgets/bubble_chat_widget.dart'; + +class Intro2Screen extends StatelessWidget { + const Intro2Screen({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.center, + children: [ + Positioned.fill( + child: Transform.flip( + flipX: true, + child: MyImage(image: MyAssets.intro_2, fit: BoxFit.cover), + ), + ), + PositionedDirectional( + end: setSize(context: context, mobile: MySpaces.s40, tablet: 0.3.w), + top: setSize(context: context, mobile: 0.17.h, tablet: 0.23.h), + width: 250, + child: SlideUpFade( + delay: Duration(milliseconds: 300), + child: BubbleChatWidget(text: context.translate.intro_2), + ), + ), + ], + ); + } +} diff --git a/lib/features/intro/presentation/ui/screens/intro_3_screen.dart b/lib/features/intro/presentation/ui/screens/intro_3_screen.dart new file mode 100644 index 0000000..3386651 --- /dev/null +++ b/lib/features/intro/presentation/ui/screens/intro_3_screen.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/widgets/bubble_chat_widget.dart'; + +class Intro3Screen extends StatelessWidget { + const Intro3Screen({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.center, + children: [ + Positioned.fill( + child: MyImage(image: MyAssets.intro_3, fit: BoxFit.cover), + ), + PositionedDirectional( + start: setSize(context: context, mobile: MySpaces.s30), + top: setSize(context: context, mobile: 180, tablet: 0.25.h), + width: 270, + child: SlideUpFade( + delay: Duration(milliseconds: 300), + child: BubbleChatWidget( + text: context.translate.intro_3, + flip: true, + ), + ), + ), + ], + ); + } +} diff --git a/lib/features/intro/presentation/ui/screens/intro_4_screen.dart b/lib/features/intro/presentation/ui/screens/intro_4_screen.dart new file mode 100644 index 0000000..e7a1562 --- /dev/null +++ b/lib/features/intro/presentation/ui/screens/intro_4_screen.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/widgets/bubble_chat_widget.dart'; + +class Intro4Screen extends StatelessWidget { + const Intro4Screen({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.center, + children: [ + Positioned.fill( + child: MyImage(image: MyAssets.intro_4, fit: BoxFit.cover), + ), + PositionedDirectional( + start: setSize(context: context, mobile: MySpaces.s10, tablet: 0.2.w), + bottom: setSize(context: context, mobile: 0.4.h, tablet: 0.4.h), + width: 237, + child: SlideUpFade( + delay: Duration(milliseconds: 300), + child: BubbleChatWidget( + text: context.translate.intro_4, + ), + ), + ), + ], + ); + } +} diff --git a/lib/features/intro/presentation/ui/screens/intro_5_screen.dart b/lib/features/intro/presentation/ui/screens/intro_5_screen.dart new file mode 100644 index 0000000..7228d8f --- /dev/null +++ b/lib/features/intro/presentation/ui/screens/intro_5_screen.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/intro/presentation/ui/widgets/bubble_chat_widget.dart'; + +class Intro5Screen extends StatelessWidget { + const Intro5Screen({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.center, + children: [ + Positioned.fill( + child: MyImage(image: MyAssets.intro_5, fit: BoxFit.cover), + ), + PositionedDirectional( + top: setSize(context: context, mobile: 0.37.h, tablet: 0.42.h), + width: 200, + child: SlideUpFade( + delay: Duration(milliseconds: 300), + child: BubbleChatWidget( + text: context.translate.intro_5, + ), + ), + ), + ], + ); + } +} diff --git a/lib/features/intro/presentation/ui/widgets/bubble_chat_widget.dart b/lib/features/intro/presentation/ui/widgets/bubble_chat_widget.dart new file mode 100644 index 0000000..729d6be --- /dev/null +++ b/lib/features/intro/presentation/ui/widgets/bubble_chat_widget.dart @@ -0,0 +1,91 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; + +class BubbleChatWidget extends StatelessWidget { + const BubbleChatWidget({ + super.key, + this.text, + this.width, + this.flip = false, + }); + + final String? text; + final double? width; + final bool flip; + + @override + Widget build(BuildContext context) { + return ClipPath( + clipper: _ShapeClipper(flip: flip), + child: Container( + width: width, + padding: EdgeInsets.only( + left: MySpaces.s18, + right: MySpaces.s18, + top: MySpaces.s16, + bottom: MySpaces.s28, + ), + decoration: BoxDecoration( + color: Color(0XFFF5E8D7).withValues(alpha: 0.5), + borderRadius: BorderRadius.all(Radius.circular(20)), + border: Border.all( + width: 1, + color: MyColors.white.withValues(alpha: 0.5), + ), + ), + child: Text( + text ?? '', + style: MYTextStyle.titr3.copyWith( + color: MyColors.black, + ), + ), + ), + ); + } +} + + + +class _ShapeClipper extends CustomClipper { + final bool flip; + + _ShapeClipper({this.flip = false}); // Add constructor + + @override + Path getClip(Size size) { + var path = Path(); + double w = size.width; + double h = size.height; + + // The drawing logic remains exactly the same + path.moveTo(w * 0.92, 0); + path.cubicTo(w * 0.96, 0, w, h * 0.05, w, h * 0.12); + path.lineTo(w, h * 0.70); + path.cubicTo(w, h * 0.78, w * 0.96, h * 0.83, w * 0.92, h * 0.83); + path.lineTo(w * 0.35, h * 0.83); + path.lineTo(w * 0.285, h); + path.lineTo(w * 0.20, h * 0.83); + path.lineTo(w * 0.08, h * 0.83); + path.cubicTo(w * 0.03, h * 0.83, 0, h * 0.78, 0, h * 0.70); + path.lineTo(0, h * 0.12); + path.cubicTo(0, h * 0.05, w * 0.03, 0, w * 0.08, 0); + path.close(); + + // If flip is true, transform the path horizontally + if (flip) { + final flipMatrix = Matrix4.identity() + ..translateByDouble(w, 0.0, 0.0, 1.0) + ..scaleByDouble(-1.0, 1.0, 1.0, 1.0); + return path.transform(flipMatrix.storage); + } + + return path; + } + + @override + bool shouldReclip(covariant _ShapeClipper oldClipper) { + return oldClipper.flip != flip; // Reclip if the flip state changes + } +} \ No newline at end of file diff --git a/lib/features/language/domain/entity/language_entity.dart b/lib/features/language/domain/entity/language_entity.dart new file mode 100644 index 0000000..a60b57e --- /dev/null +++ b/lib/features/language/domain/entity/language_entity.dart @@ -0,0 +1,21 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; + +class LanguageEntity extends Equatable { + final String? title; + final String? code; + final Locale? locale; + + const LanguageEntity({ + this.title, + this.code, + this.locale, + }); + + @override + List get props => [ + title, + code, + locale, + ]; +} diff --git a/lib/features/language/presentation/bloc/language_bloc.dart b/lib/features/language/presentation/bloc/language_bloc.dart new file mode 100644 index 0000000..c6a616f --- /dev/null +++ b/lib/features/language/presentation/bloc/language_bloc.dart @@ -0,0 +1,82 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; +import 'package:hadi_hoda_flutter/core/utils/storage_path.dart'; +import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_bloc.dart'; +import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_event.dart'; +import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_event.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_state.dart'; +import 'package:hadi_hoda_flutter/init_bindings.dart'; + +class LanguageBloc extends Bloc { + /// ------------constructor------------ + LanguageBloc() : super(const LanguageState()) { + on(_changeLanguageEvent); + on(_saveLevelsEvent); + on(_initLanguageEvent); + } + + /// ------------UseCases------------ + + /// ------------Variables------------ + + /// ------------Controllers------------ + + /// ------------Functions------------ + FutureOr _changeLanguageEvent( + ChangeLanguageEvent event, + Emitter emit, + ) { + emit(state.copyWith(selectedLang: event.lang)); + } + + /// ------------Api Calls------------ + FutureOr _saveLevelsEvent( + SaveLevelsEvent event, + Emitter emit, + ) async { + await Future.wait([ + LocalStorage.saveData( + key: MyConstants.selectLanguage, + value: state.selectedLang.code ?? MyConstants.defaultLanguage, + ), + ]); + AppBloc appBloc = locator(); + appBloc.add( + ChangeLocaleEvent(state.selectedLang.locale ?? Locale('en', 'US'))); + + if (Directory( + '${StoragePath.documentDir.path}/${state.selectedLang + .code}/answer_audio') + .existsSync() && Directory( + '${StoragePath.documentDir.path}/${state.selectedLang + .code}/question_audio') + .existsSync()) { + if (MyContext.get.mounted) { + MyContext.get.goNamed(Routes.homePage); + } + } else { + await Future.wait([ + LocalStorage.deleteData(key: MyConstants.downloadedAudio), + LocalStorage.deleteData(key: MyConstants.extractedAudio), + ]); + if (MyContext.get.mounted) { + MyContext.get.goNamed(Routes.downloadPage); + } + } + } + + FutureOr _initLanguageEvent(InitLanguageEvent event, Emitter emit) { + final String selectedLanguage = LocalStorage.readData( + key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; + emit(state.copyWith(selectedLang: LanguageEntity(code: selectedLanguage))); + } +} diff --git a/lib/features/language/presentation/bloc/language_event.dart b/lib/features/language/presentation/bloc/language_event.dart new file mode 100644 index 0000000..accf591 --- /dev/null +++ b/lib/features/language/presentation/bloc/language_event.dart @@ -0,0 +1,17 @@ +import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; + +sealed class LanguageEvent { + const LanguageEvent(); +} +class ChangeLanguageEvent extends LanguageEvent { + final LanguageEntity lang; + + const ChangeLanguageEvent(this.lang); +} +class SaveLevelsEvent extends LanguageEvent { + const SaveLevelsEvent(); +} +class InitLanguageEvent extends LanguageEvent { + const InitLanguageEvent(); +} + diff --git a/lib/features/language/presentation/bloc/language_state.dart b/lib/features/language/presentation/bloc/language_state.dart new file mode 100644 index 0000000..994f9ce --- /dev/null +++ b/lib/features/language/presentation/bloc/language_state.dart @@ -0,0 +1,23 @@ +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; + +class LanguageState { + final BaseStatus saveLevelsStatus; + final LanguageEntity selectedLang; + + const LanguageState({ + this.saveLevelsStatus = const BaseInit(), + this.selectedLang = const LanguageEntity(code: MyConstants.defaultLanguage), + }); + + LanguageState copyWith({ + BaseStatus? saveLevelsStatus, + LanguageEntity? selectedLang, + }) { + return LanguageState( + saveLevelsStatus: saveLevelsStatus ?? this.saveLevelsStatus, + selectedLang: selectedLang ?? this.selectedLang, + ); + } +} diff --git a/lib/features/language/presentation/ui/language_page.dart b/lib/features/language/presentation/ui/language_page.dart new file mode 100644 index 0000000..9165123 --- /dev/null +++ b/lib/features/language/presentation/ui/language_page.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/button/my_blue_button.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_bloc.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_event.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_state.dart'; +import 'package:hadi_hoda_flutter/features/language/presentation/ui/widgets/language_widget.dart'; + +class LanguagePage extends StatelessWidget { + const LanguagePage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + height: context.heightScreen, + width: context.widthScreen, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Color(0XFF00154C), Color(0XFF150532)], + ), + image: DecorationImage( + image: AssetImage(MyAssets.pattern), + scale: 3, + repeat: ImageRepeat.repeat, + colorFilter: ColorFilter.mode( + Colors.white.withValues(alpha: 0.2), + BlendMode.srcIn, + ), + ), + ), + child: Padding( + padding: EdgeInsets.only( + left: setSize(context: context, mobile: 60, tablet: 0.3.w) ?? 0, + right: setSize(context: context, mobile: 60, tablet: 0.3.w) ?? 0, + bottom: MySpaces.s40, + top: 100, + ), + child: Column( + children: [_title(context), _list(context), _btn(context)], + ), + ), + ), + ); + } + + Widget _title(BuildContext context) { + return Row( + spacing: MySpaces.s10, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + MyImage(image: MyAssets.lang, size: 28), + Text( + context.translate.select_language, + style: MYTextStyle.titr0.copyWith(color: Color(0XFF847AC4)), + ), + ], + ); + } + + Expanded _list(BuildContext context) { + return Expanded( + child: Material( + color: MyColors.transparent, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate( + MyConstants.languages.length, + (index) => + BlocBuilder( + buildWhen: (previous, current) => + previous.selectedLang.code != current.selectedLang.code, + builder: (context, state) { + final LanguageBloc languageBloc = context.read(); + return LanguageWidget( + selected: state.selectedLang.code == + MyConstants.languages[index].code, + onTap: () { + languageBloc.add(ChangeLanguageEvent(MyConstants.languages[index])); + }, + title: MyConstants.languages[index].title, + ); + } + ), + ), + ), + ), + ); + } + + Widget _btn(BuildContext context) { + return MyBlueButton( + onTap: () => context.read().add(SaveLevelsEvent()), + title: context.translate.select, + ); + } +} diff --git a/lib/features/language/presentation/ui/widgets/language_widget.dart b/lib/features/language/presentation/ui/widgets/language_widget.dart new file mode 100644 index 0000000..1725b68 --- /dev/null +++ b/lib/features/language/presentation/ui/widgets/language_widget.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; + +class LanguageWidget extends StatelessWidget { + const LanguageWidget({super.key, this.selected, this.onTap, this.title}); + + final bool? selected; + final VoidCallback? onTap; + final String? title; + + @override + Widget build(BuildContext context) { + return ListTile( + selected: selected ?? false, + onTap: onTap, + title: Text(title ?? ''), + titleTextStyle: MYTextStyle.titr1, + contentPadding: EdgeInsets.symmetric( + vertical: MySpaces.s12, + horizontal: 30, + ), + minVerticalPadding: 0, + minTileHeight: 0, + minLeadingWidth: 0, + horizontalTitleGap: MySpaces.s12, + leading: selected ?? false + ? Container( + height: 17, + width: 17, + padding: EdgeInsets.all(3), + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all(width: 1, color: Color(0XFF3CFF3C)), + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Color(0XFF48D336), Color(0XFF2D7C23)], + ), + ), + child: MyImage(image: MyAssets.doneRounded), + ) + : SizedBox(height: 17, width: 17), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(12)), + ), + selectedTileColor: MyColors.white.withValues(alpha: 0.2), + selectedColor: MyColors.white, + ); + } +} diff --git a/lib/features/level/data/datasource/level_datasource.dart b/lib/features/level/data/datasource/level_datasource.dart new file mode 100644 index 0000000..64cdcf9 --- /dev/null +++ b/lib/features/level/data/datasource/level_datasource.dart @@ -0,0 +1,32 @@ +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/level_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart'; +import 'package:hive/hive.dart'; + +abstract class ILevelDatasource { + Future> getLevels({required LevelParams params}); +} + +/// Local +class LocalLevelDatasourceImpl implements ILevelDatasource { + const LocalLevelDatasourceImpl(); + + @override + Future> getLevels({required LevelParams params}) async { + try { + final String selectedLanguage = LocalStorage.readData( + key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; + final Box levelBox = Hive.box(MyConstants.levelBox); + final TotalDataEntity findData = levelBox.values.singleWhere( + (e) => e.code == selectedLanguage, + orElse: () => TotalDataEntity(), + ); + return findData.levels ?? []; + } catch (_) { + throw MyException(errorMessage: 'Operation Failed'); + } + } +} \ No newline at end of file diff --git a/lib/features/level/data/model/level_model.dart b/lib/features/level/data/model/level_model.dart new file mode 100644 index 0000000..2400039 --- /dev/null +++ b/lib/features/level/data/model/level_model.dart @@ -0,0 +1,23 @@ +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/data/model/question_model.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart'; + +class LevelModel extends LevelEntity { + LevelModel({ + super.id, + super.order, + super.title, + super.questions, + }); + + factory LevelModel.fromJson(Map json) { + return LevelModel( + id: json['id'], + order: json['order'], + title: json['title'], + questions: json['questions'] + ?.map((e) => QuestionModel.fromJson(e)) + .toList(), + ); + } +} diff --git a/lib/features/level/data/repository_impl/level_repository_impl.dart b/lib/features/level/data/repository_impl/level_repository_impl.dart new file mode 100644 index 0000000..07d9366 --- /dev/null +++ b/lib/features/level/data/repository_impl/level_repository_impl.dart @@ -0,0 +1,33 @@ +import 'package:flutter/foundation.dart'; +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/level_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/level/data/datasource/level_datasource.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/repository/level_repository.dart'; + +class LevelRepositoryImpl implements ILevelRepository { + final ILevelDatasource datasource; + + const LevelRepositoryImpl(this.datasource); + + @override + Future, MyException>> getLevels({ + required LevelParams params, + }) async { + try { + final List response = await datasource.getLevels( + params: params, + ); + return DataState.success(response); + } on MyException catch (e) { + return DataState.error(e); + } catch (e) { + if (kDebugMode) { + rethrow; + } else { + return DataState.error(MyException(errorMessage: '$e')); + } + } + } +} diff --git a/lib/features/level/domain/entity/level_entity.dart b/lib/features/level/domain/entity/level_entity.dart new file mode 100644 index 0000000..cee3840 --- /dev/null +++ b/lib/features/level/domain/entity/level_entity.dart @@ -0,0 +1,23 @@ +import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart'; +import 'package:hive/hive.dart'; + +part 'level_entity.g.dart'; + +@HiveType(typeId: 1) +class LevelEntity extends HiveObject { + @HiveField(0) + int? id; + @HiveField(1) + int? order; + @HiveField(2) + String? title; + @HiveField(3) + List? questions; + + LevelEntity({ + this.id, + this.order, + this.title, + this.questions, + }); +} diff --git a/lib/features/level/domain/entity/level_entity.g.dart b/lib/features/level/domain/entity/level_entity.g.dart new file mode 100644 index 0000000..22ae93a --- /dev/null +++ b/lib/features/level/domain/entity/level_entity.g.dart @@ -0,0 +1,50 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'level_entity.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class LevelEntityAdapter extends TypeAdapter { + @override + final int typeId = 1; + + @override + LevelEntity read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return LevelEntity( + id: fields[0] as int?, + order: fields[1] as int?, + title: fields[2] as String?, + questions: (fields[3] as List?)?.cast(), + ); + } + + @override + void write(BinaryWriter writer, LevelEntity obj) { + writer + ..writeByte(4) + ..writeByte(0) + ..write(obj.id) + ..writeByte(1) + ..write(obj.order) + ..writeByte(2) + ..write(obj.title) + ..writeByte(3) + ..write(obj.questions); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is LevelEntityAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/features/level/domain/entity/level_location.dart b/lib/features/level/domain/entity/level_location.dart new file mode 100644 index 0000000..ca2bce8 --- /dev/null +++ b/lib/features/level/domain/entity/level_location.dart @@ -0,0 +1,15 @@ +class LevelLocation { + final int? index; + final double? top; + final double? bottom; + final double? right; + final double? left; + + const LevelLocation({ + this.index, + this.top, + this.bottom, + this.right, + this.left, + }); +} diff --git a/lib/features/level/domain/entity/total_data_entity.dart b/lib/features/level/domain/entity/total_data_entity.dart new file mode 100644 index 0000000..1428455 --- /dev/null +++ b/lib/features/level/domain/entity/total_data_entity.dart @@ -0,0 +1,17 @@ +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hive/hive.dart'; + +part 'total_data_entity.g.dart'; + +@HiveType(typeId: 0) +class TotalDataEntity extends HiveObject{ + @HiveField(0) + String? code; + @HiveField(1) + List? levels; + + TotalDataEntity({ + this.code, + this.levels, + }); +} \ No newline at end of file diff --git a/lib/features/level/domain/entity/total_data_entity.g.dart b/lib/features/level/domain/entity/total_data_entity.g.dart new file mode 100644 index 0000000..947076d --- /dev/null +++ b/lib/features/level/domain/entity/total_data_entity.g.dart @@ -0,0 +1,44 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'total_data_entity.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class TotalDataEntityAdapter extends TypeAdapter { + @override + final int typeId = 0; + + @override + TotalDataEntity read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return TotalDataEntity( + code: fields[0] as String?, + levels: (fields[1] as List?)?.cast(), + ); + } + + @override + void write(BinaryWriter writer, TotalDataEntity obj) { + writer + ..writeByte(2) + ..writeByte(0) + ..write(obj.code) + ..writeByte(1) + ..write(obj.levels); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is TotalDataEntityAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/features/level/domain/repository/level_repository.dart b/lib/features/level/domain/repository/level_repository.dart new file mode 100644 index 0000000..672d6f4 --- /dev/null +++ b/lib/features/level/domain/repository/level_repository.dart @@ -0,0 +1,8 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/level_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; + +abstract class ILevelRepository { + Future, MyException>> getLevels({required LevelParams params}); +} diff --git a/lib/features/level/domain/usecases/get_levels_usecase.dart b/lib/features/level/domain/usecases/get_levels_usecase.dart new file mode 100644 index 0000000..3f12106 --- /dev/null +++ b/lib/features/level/domain/usecases/get_levels_usecase.dart @@ -0,0 +1,17 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/level_params.dart'; +import 'package:hadi_hoda_flutter/core/usecase/usecase.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/repository/level_repository.dart'; + +class GetLevelsUseCase implements UseCase, LevelParams> { + final ILevelRepository repository; + + const GetLevelsUseCase(this.repository); + + @override + Future, MyException>> call(LevelParams params) { + return repository.getLevels(params: params); + } +} diff --git a/lib/features/level/presentation/bloc/level_bloc.dart b/lib/features/level/presentation/bloc/level_bloc.dart new file mode 100644 index 0000000..981cc3e --- /dev/null +++ b/lib/features/level/presentation/bloc/level_bloc.dart @@ -0,0 +1,309 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/params/level_params.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/core/services/audio_service.dart'; +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_location.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/usecases/get_levels_usecase.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart'; + +class LevelBloc extends Bloc { + /// ------------constructor------------ + LevelBloc( + this._getLeveslUseCase, + this._mainAudioService, + this._effectAudioService, + ) : super(const LevelState()) { + volumeStream = _mainAudioService.volumeStream(); + playMusic(); + on(_getLevelListEvent); + on(_setCurrentLevelEvent); + on(_startScrollEvent); + on(_chooseLevelEvent); + } + + @override + Future close() { + scrollController.dispose(); + return super.close(); + } + + /// ------------UseCases------------ + final GetLevelsUseCase _getLeveslUseCase; + + /// ------------Variables------------ + final List locationList = [ + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: -0.03.h, tablet: -0.03.h), + left: setSize(context: MyContext.get, mobile: 0.1.w, tablet: 0.2.w), + index: 0, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.03.h, tablet: 0.1.h), + left: setSize(context: MyContext.get, mobile: 0.28.w, tablet: 0.4.w), + index: 1, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.1.h, tablet: 0.21.h), + left: setSize(context: MyContext.get, mobile: 0.14.w, tablet: 0.2.w), + index: 2, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.2.h, tablet: 0.38.h), + left: setSize(context: MyContext.get, mobile: 0.3.w, tablet: 0.3.w), + index: 3, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.24.h, tablet: 0.47.h), + left: setSize(context: MyContext.get, mobile: 0.5.w, tablet: 0.5.w), + index: 4, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.33.h, tablet: 0.55.h), + left: setSize(context: MyContext.get, mobile: 0.65.w, tablet: 0.8.w), + index: 5, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.45.h, tablet: 0.8.h), + left: setSize(context: MyContext.get, mobile: 0.57.w, tablet: 0.8.w), + index: 6, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.55.h, tablet: 1.1.h), + left: setSize(context: MyContext.get, mobile: 0.57.w, tablet: 0.77.w), + index: 7, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.6.h, tablet: 1.2.h), + left: setSize(context: MyContext.get, mobile: 0.4.w, tablet: 0.65.w), + index: 8, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.63.h, tablet: 1.25.h), + left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.3.w), + index: 9, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.7.h, tablet: 1.38.h), + left: setSize(context: MyContext.get, mobile: 0, tablet: 0.04.w), + index: 10, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.75.h, tablet: 1.46.h), + left: setSize(context: MyContext.get, mobile: 0.15.w, tablet: 0.22.w), + index: 11, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.78.h, tablet: 1.52.h), + left: setSize(context: MyContext.get, mobile: 0.4.w, tablet: 0.45.w), + index: 12, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.85.h, tablet: 1.68.h), + left: setSize(context: MyContext.get, mobile: 0.5.w, tablet: 0.68.w), + index: 13, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.94.h, tablet: 1.8.h), + left: setSize(context: MyContext.get, mobile: 0.45.w, tablet: 0.6.w), + index: 14, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 1.95.h), + left: setSize(context: MyContext.get, mobile: 0.45.w, tablet: 0.6.w), + index: 15, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 2.01.h), + left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.4.w), + index: 16, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 2.0.h), + left: setSize(context: MyContext.get, mobile: 0, tablet: 0.1.w), + index: 17, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.1.h, tablet: 2.17.h), + left: setSize(context: MyContext.get, mobile: 0, tablet: 0.04.w), + index: 18, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.2.h, tablet: 2.32.h), + left: setSize(context: MyContext.get, mobile: 0.05.w, tablet: 0.1.w), + index: 19, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.23.h, tablet: 2.35.h), + left: setSize(context: MyContext.get, mobile: 0.23.w, tablet: 0.25.w), + index: 20, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.31.h, tablet: 2.5.h), + left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.33.w), + index: 21, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.37.h, tablet: 2.6.h), + left: setSize(context: MyContext.get, mobile: 0.1.w, tablet: 0.2.w), + index: 22, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.45.h, tablet: 2.7.h), + left: setSize(context: MyContext.get, mobile: 0.1.w, tablet: 0.1.w), + index: 23, + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.5.h, tablet: 2.8.h), + left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.15.w), + index: 24, + ), + ]; + + + final List levelList = []; + + late final Stream volumeStream; + + + + /// ------------Controllers------------ + final ScrollController scrollController = ScrollController(); + final AudioService _mainAudioService; + final AudioService _effectAudioService; + + /// ------------Functions------------ + Future playMusic() async { + await Future.wait([ + _mainAudioService.setAudio(assetPath: MyAudios.question), + _mainAudioService.setLoopMode(isLoop: true), + ]); + await _mainAudioService.play(); + } + + void goToQuestionPage(BuildContext context, LevelEntity level){ + context.pushReplacementNamed( + Routes.questionPage, + pathParameters: { + 'id': '${level.id}', + }, + ); + } + + void goToHomePage(BuildContext context) { + context.goNamed(Routes.homePage); + } + + LevelType getLevelType(int index) { + final int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel) ?? '1', + ); + + if (index < currentLevel) { + return LevelType.finished; + } else if (index == currentLevel) { + return LevelType.current; + } else { + return LevelType.unFinished; + } + } + + Future changeMute() async { + await Future.wait([ + _mainAudioService.changeMute(), + _effectAudioService.changeMute(), + ]); + } + + int get diamonds { + int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel) ?? '1', + ); + return currentLevel - 1; + } + + /// ------------Api Calls------------ + FutureOr _getLevelListEvent(GetLevelListEvent event, + Emitter emit) async { + final int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel) ?? '1', + ); + await _getLeveslUseCase(LevelParams()).then((value) { + value.fold( + (data) async { + levelList.addAll(data); + try { + emit(state.copyWith( + getLevelStatus: const BaseComplete(''), + chooseLevel: data.singleWhere((e) => e.order == currentLevel), + )); + } catch (e) { + emit(state.copyWith( + getLevelStatus: const BaseComplete(''), + chooseLevel: LevelEntity(), + )); + } + add(StartScrollEvent()); + }, + (error) {}, + ); + }); + } + + FutureOr _startScrollEvent( + StartScrollEvent event, + Emitter emit, + ) async { + final int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel) ?? '1', + ); + + await Future.delayed(const Duration(seconds: 1)); + if (scrollController.hasClients) { + if(currentLevel >= 14){ + scrollController.animateTo( + scrollController.position.maxScrollExtent, + duration: const Duration(milliseconds: 500), // Note: 500 seconds is very long. + curve: Curves.easeInOut, + ); + } else if( currentLevel > 8 && currentLevel < 14){ + scrollController.animateTo( + scrollController.position.maxScrollExtent / 2, + duration: const Duration(milliseconds: 500), // Note: 500 seconds is very long. + curve: Curves.easeInOut, + ); + } + } + } + + FutureOr _setCurrentLevelEvent(SetCurrentLevelEvent event, + Emitter emit) async { + final String? currentLevel = LocalStorage.readData( + key: MyConstants.currentLevel); + if (currentLevel == null || currentLevel.isEmpty) { + await LocalStorage.saveData(key: MyConstants.currentLevel, value: '1'); + } + add(GetLevelListEvent()); + } + + FutureOr _chooseLevelEvent(ChooseLevelEvent event, + Emitter emit,) { + if (event.type != LevelType.unFinished) { + emit(state.copyWith(chooseLevel: event.level)); + } + } + +} diff --git a/lib/features/level/presentation/bloc/level_event.dart b/lib/features/level/presentation/bloc/level_event.dart new file mode 100644 index 0000000..818ed6f --- /dev/null +++ b/lib/features/level/presentation/bloc/level_event.dart @@ -0,0 +1,15 @@ +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart'; + +sealed class LevelEvent { + const LevelEvent(); +} + +class GetLevelListEvent extends LevelEvent {} +class StartScrollEvent extends LevelEvent {} +class SetCurrentLevelEvent extends LevelEvent {} +class ChooseLevelEvent extends LevelEvent { + final LevelEntity level; + final LevelType type; + const ChooseLevelEvent(this.level, this.type); +} diff --git a/lib/features/level/presentation/bloc/level_state.dart b/lib/features/level/presentation/bloc/level_state.dart new file mode 100644 index 0000000..adc10ed --- /dev/null +++ b/lib/features/level/presentation/bloc/level_state.dart @@ -0,0 +1,22 @@ +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; + +class LevelState { + final BaseStatus getLevelStatus; + final LevelEntity? chooseLevel; + + const LevelState({ + this.getLevelStatus = const BaseInit(), + this.chooseLevel, + }); + + LevelState copyWith({ + BaseStatus? getLevelStatus, + LevelEntity? chooseLevel, + }) { + return LevelState( + getLevelStatus: getLevelStatus ?? this.getLevelStatus, + chooseLevel: chooseLevel ?? chooseLevel, + ); + } +} diff --git a/lib/features/level/presentation/ui/level_page.dart b/lib/features/level/presentation/ui/level_page.dart new file mode 100644 index 0000000..2fb4ce7 --- /dev/null +++ b/lib/features/level/presentation/ui/level_page.dart @@ -0,0 +1,300 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/rotation_planet.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/ship_anim.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; +import 'package:hadi_hoda_flutter/core/widgets/pop_scope/my_pop_scope.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_bloc.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/diamond_level.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_path.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/play_button.dart'; + +class LevelPage extends StatelessWidget { + const LevelPage({super.key}); + + + + @override + Widget build(BuildContext context) { + return Scaffold( + body: MyPopScope( + child: Stack( + alignment: Alignment.center, + children: [ + SingleChildScrollView( + controller: context.read().scrollController, + reverse: true, + child: Stack( + alignment: Alignment.center, + children: [ + _background(context), + _path(context), + _planets(context), + ], + ), + ), + _topButtons(context), + Positioned( + bottom: 0, + child: Stack( + alignment: Alignment.center, + clipBehavior: Clip.none, + children: [ + _ship(context), + _playButton(context), + ], + ), + ) + ], + ), + ), + ); + } + + Positioned _planets(BuildContext context) { + return Positioned.fill( + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + bottom: 0.2.h, + right: setSize(context: context, mobile: -40, tablet: -80), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet1, + size: setSize(context: context, mobile: 180), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 0.5.h, tablet: 0.8.h), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet2, + size: setSize(context: context, mobile: 110), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 0.55.h, tablet: 0.9.h), + left: setSize(context: context, mobile: -120, tablet: -200), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet3, + size: setSize(context: context, mobile: 250), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 0.85.h, tablet: 1.4.h), + right: 30, + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet4, + size: setSize(context: context, mobile: 100), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 0.95.h, tablet: 1.65.h), + left: setSize(context: context, mobile: -130, tablet: -220), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet5, + size: setSize(context: context, mobile: 250), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 1.25.h, tablet: 2.1.h), + right: setSize(context: context, mobile: 20, tablet: 20), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet6, + size: setSize(context: context, mobile: 60), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 1.28.h, tablet: 2.2.h), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet7, + size: setSize(context: context, mobile: 100), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 1.4.h, tablet: 2.3.h), + right: setSize(context: context, mobile: -50, tablet: -120), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet8, + size: setSize(context: context, mobile: 200), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 1.5.h, tablet: 2.6.h), + left: -20, + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet9, + size: setSize(context: context, mobile: 100), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 1.58.h, tablet: 2.8.h), + child: RotationPlanet( + child: MyImage( + image: MyAssets.planet10, + size: setSize(context: context, mobile: 60), + ), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 1.65.h, tablet: 2.9.h), + right: 20, + child: MyImage( + image: MyAssets.satellite, + size: setSize(context: context, mobile: 80), + ), + ), + Positioned( + bottom: setSize(context: context, mobile: 1.63.h, tablet: 2.9.h), + left: setSize(context: context, mobile: 80, tablet: 0.2.w), + child: MyImage( + image: MyAssets.planetFinal, + size: setSize(context: context, mobile: 250), + ), + ), + ], + ), + ); + } + + Widget _path(BuildContext context) { + return Positioned.fill( + top: 250, + bottom: 150, + right: 60, + left: 60, + child: Stack( + alignment: Alignment.center, + children: [ + Positioned.fill( + child: LevelPath(), + ), + Positioned.fill(child: _levelLocation(context)), + ], + ), + ); + } + + Widget _levelLocation(BuildContext context) { + return BlocBuilder( + builder: (context, state) => Stack( + clipBehavior: Clip.none, + children: [ + ...List.generate( + context.read().levelList.length, + (index) => Positioned( + top: context.read().locationList[index].top, + bottom: context.read().locationList[index].bottom, + right: context.read().locationList[index].right, + left: context.read().locationList[index].left, + child: BlocBuilder( + buildWhen: (previous, current) => + previous.chooseLevel?.id != current.chooseLevel?.id, + builder: (context, state) => LevelWidget( + chooseLevel: state.chooseLevel, + level: context.read().levelList[index], + type: context.read().getLevelType(index + 1), + onTap: (LevelEntity level, LevelType type) { + context.read().add( + ChooseLevelEvent(level, type), + ); + }, + ), + ), + ), + ), + ], + ), + ); + } + + Widget _ship(BuildContext context) { + return ShipAnim( + child: MyImage(image: MyAssets.ship), + ); + } + + Widget _playButton(BuildContext context) { + return BlocBuilder( + buildWhen: (previous, current) => + previous.chooseLevel?.id != current.chooseLevel?.id, + builder: (context, state) { + return PlayButton( + level: state.chooseLevel ?? LevelEntity(), + onTap: (level) => + context.read().goToQuestionPage(context, level), + ); + } + ); + } + + Positioned _topButtons(BuildContext context) { + return Positioned( + left: MySpaces.s16, + right: MySpaces.s16, + top: setPlatform(android: MySpaces.s20, iOS: 50), + child: Row( + spacing: MySpaces.s16, + children: [ + MyInkwell( + onTap: () => context.read().goToHomePage(context), + audio: MyAudios.back, + child: MyImage( + image: MyAssets.homeButton, + size: setSize(context: context, tablet: 80), + ), + ), + Spacer(), + DiamondLevel( + diamonds: context.read().diamonds, + ), + StreamBuilder( + initialData: 1, + stream: context.read().volumeStream, + builder: (context, snapshot) => MyInkwell( + onTap: () => context.read().changeMute(), + child: MyImage( + image: snapshot.data == 0 ? MyAssets.musicOff : MyAssets.musicOn, + size: setSize(context: context, tablet: 80), + ), + ), + ), + ], + ), + ); + } + + Widget _background(BuildContext context) { + return MyImage( + image: MyAssets.mapBackground, + fit: BoxFit.cover, + ); + } +} diff --git a/lib/features/level/presentation/ui/widgets/bottom_path.dart b/lib/features/level/presentation/ui/widgets/bottom_path.dart new file mode 100644 index 0000000..0d5e1b3 --- /dev/null +++ b/lib/features/level/presentation/ui/widgets/bottom_path.dart @@ -0,0 +1,81 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:path_drawing/path_drawing.dart'; + +class BottomPath extends StatelessWidget { + const BottomPath({super.key}); + + + @override + Widget build(BuildContext context) { + return CustomPaint( + painter: _Path(), + size: Size( + context.widthScreen * 0.76, + context.heightScreen * 0.64, + ), // or Size.infinite inside a parent with constraints + ); + } +} + +class _Path extends CustomPainter { + const _Path(); + + final Color color = MyColors.white; + + // SVG viewBox + static const double _vbW = 500; + static const double _vbH = 1523; + + // Your SVG path data (unchanged) + static const String _svgPath = + 'M1.95892 1520.75C1.95892 1520.75 199.206 1423.63 169.156 1328.9C143.058 1246.63 30.8103 1281.9 15.4421 1225.27C-11.9488 1124.33 48.5736 1164.01 42.795 1033.8C38.5466 938.07 154.913 925.725 219.623 855.048C286.233 782.296 385.022 821.209 446.532 744.097C516.262 656.681 493.917 461.712 493.917 461.712C493.917 461.712 440.122 333.473 428.04 246.36C414.846 151.222 436.901 0.572754 436.901 0.572754'; + + @override + void paint(Canvas canvas, Size size) { + // Scale SVG viewBox -> current canvas while preserving aspect + final scale = _scaleToFit( + srcW: _vbW, + srcH: _vbH, + dstW: size.width, + dstH: size.height, + ); + canvas.translate( + (size.width - _vbW * scale) / 2, + (size.height - _vbH * scale) / 2, + ); + canvas.scale(scale); + + // Parse and dash the path + final path = parseSvgPathData(_svgPath); + final dashed = dashPath( + path, + dashArray: CircularIntervalList(const [3.08, 13.1]), + ); + + // Stroke paint + final paint = Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = 4.62295 + ..color = color + ..strokeCap = StrokeCap.butt + ..strokeJoin = StrokeJoin.miter; + + canvas.drawPath(dashed, paint); + } + + double _scaleToFit({ + required double srcW, + required double srcH, + required double dstW, + required double dstH, + }) { + final sx = dstW / srcW; + final sy = dstH / srcH; + return sx < sy ? sx : sy; // contain + } + + @override + bool shouldRepaint(covariant _Path oldDelegate) => oldDelegate.color != color; +} diff --git a/lib/features/level/presentation/ui/widgets/diamond_level.dart b/lib/features/level/presentation/ui/widgets/diamond_level.dart new file mode 100644 index 0000000..4170dc3 --- /dev/null +++ b/lib/features/level/presentation/ui/widgets/diamond_level.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/gap.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; + +class DiamondLevel extends StatelessWidget { + const DiamondLevel({super.key, this.diamonds}); + + final int? diamonds; + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.center, + children: [ + MyImage( + image: MyAssets.diamondContainer, + size: setSize(context: context, tablet: 80), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + MyImage( + image: MyAssets.diamondBig, + size: setSize(context: context, mobile: 42, tablet: 60), + ), + MySpaces.s16.gapWidth, + ShaderMask( + blendMode: BlendMode.modulate, + shaderCallback: (bounds) => LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Color(0XFF4BA5EA), Color(0XFF0C4EE9)], + ).createShader(bounds), + child: Text( + '$diamonds', + maxLines: 1, + style: MYTextStyle.button1.copyWith( + shadows: [ + BoxShadow( + color: MyColors.black.withValues(alpha: 0.25), + offset: Offset(0, 1.43), + blurRadius: 1.43, + ), + ], + ), + ), + ), + ], + ), + ], + ); + } +} diff --git a/lib/features/level/presentation/ui/widgets/level_path.dart b/lib/features/level/presentation/ui/widgets/level_path.dart new file mode 100644 index 0000000..d052352 --- /dev/null +++ b/lib/features/level/presentation/ui/widgets/level_path.dart @@ -0,0 +1,311 @@ +import 'package:flutter/material.dart'; +import 'package:path_drawing/path_drawing.dart'; + +class LevelPath extends StatelessWidget { + const LevelPath({ + super.key, + }); + + final double width = 357; + final double height = 2230; + + @override + Widget build(BuildContext context) { + return CustomPaint( + size: Size(width, height), + painter: CurvedPathPainter(width: width, height: height), + ); + } +} + +class CurvedPathPainter extends CustomPainter { + const CurvedPathPainter({ + required this.width, + required this.height + }); + + final double width; + final double height; + + @override + void paint(Canvas canvas, Size size) { + // Scale factor to fit the design + final scaleX = size.width / width; + final scaleY = size.height / height; + + final paint = Paint() + ..color = Colors.white + ..strokeWidth = 3 + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round; + + // First path (bottom curve) + final path1 = Path(); + path1.moveTo(86.9641 * scaleX, 2231.26 * scaleY); + path1.cubicTo( + 195.179 * scaleX, + 2177.98 * scaleY, + 178.692 * scaleX, + 2126.01 * scaleY, + 178.692 * scaleX, + 2126.01 * scaleY, + ); + path1.cubicTo( + 164.374 * scaleX, + 2080.87 * scaleY, + 102.793 * scaleX, + 2100.22 * scaleY, + 94.3613 * scaleX, + 2069.15 * scaleY, + ); + path1.cubicTo( + 79.334 * scaleX, + 2013.78 * scaleY, + 112.538 * scaleX, + 2035.55 * scaleY, + 109.368 * scaleX, + 1964.11 * scaleY, + ); + path1.cubicTo( + 107.037 * scaleX, + 1911.59 * scaleY, + 170.879 * scaleX, + 1904.82 * scaleY, + 206.38 * scaleX, + 1866.04 * scaleY, + ); + path1.cubicTo( + 242.924 * scaleX, + 1826.13 * scaleY, + 297.122 * scaleX, + 1847.48 * scaleY, + 330.868 * scaleX, + 1805.17 * scaleY, + ); + path1.cubicTo( + 369.124 * scaleX, + 1757.21 * scaleY, + 356.865 * scaleX, + 1650.25 * scaleY, + 356.865 * scaleX, + 1650.25 * scaleY, + ); + path1.cubicTo( + 356.865 * scaleX, + 1650.25 * scaleY, + 327.352 * scaleX, + 1579.89 * scaleY, + 320.723 * scaleX, + 1532.1 * scaleY, + ); + path1.cubicTo( + 313.484 * scaleX, + 1479.91 * scaleY, + 325.584 * scaleX, + 1397.26 * scaleY, + 325.584 * scaleX, + 1397.26 * scaleY, + ); + + // Second path (top curve) + final path2 = Path(); + path2.moveTo(140.464 * scaleX, 1.50636 * scaleY); + path2.cubicTo( + 140.464 * scaleX, + 1.50636 * scaleY, + 139.141 * scaleX, + -0.0589981 * scaleY, + 114.441 * scaleX, + 45.9425 * scaleY, + ); + path2.cubicTo( + 91.5014 * scaleX, + 88.6635 * scaleY, + 57.6838 * scaleX, + 106.774 * scaleY, + 55.4723 * scaleX, + 155.213 * scaleY, + ); + path2.cubicTo( + 52.7912 * scaleX, + 213.94 * scaleY, + 128.813 * scaleX, + 286.676 * scaleY, + 128.813 * scaleX, + 286.676 * scaleY, + ); + path2.cubicTo( + 128.813 * scaleX, + 286.676 * scaleY, + 155.78 * scaleX, + 337.75 * scaleY, + 151.85 * scaleX, + 372.064 * scaleY, + ); + path2.cubicTo( + 148.066 * scaleX, + 405.109 * scaleY, + 112.75 * scaleX, + 447.729 * scaleY, + 112.75 * scaleX, + 447.729 * scaleY, + ); + path2.cubicTo( + 112.75 * scaleX, + 447.729 * scaleY, + 16.9303 * scaleX, + 455.877 * scaleY, + 6.0151 * scaleX, + 501.202 * scaleY, + ); + path2.cubicTo( + -1.31338 * scaleX, + 531.634 * scaleY, + 29.8983 * scaleX, + 577.713 * scaleY, + 29.8983 * scaleX, + 577.713 * scaleY, + ); + path2.cubicTo( + 29.8983 * scaleX, + 577.713 * scaleY, + -18.1423 * scaleX, + 654.926 * scaleY, + 10.665 * scaleX, + 687.618 * scaleY, + ); + path2.cubicTo( + 34.3963 * scaleX, + 714.549 * scaleY, + 101.548 * scaleX, + 701.356 * scaleY, + 101.548 * scaleX, + 701.356 * scaleY, + ); + path2.cubicTo( + 101.548 * scaleX, + 701.356 * scaleY, + 234.377 * scaleX, + 670.297 * scaleY, + 258.796 * scaleX, + 727.564 * scaleY, + ); + path2.cubicTo( + 270.16 * scaleX, + 754.214 * scaleY, + 258.796 * scaleX, + 801.75 * scaleY, + 258.796 * scaleX, + 801.75 * scaleY, + ); + path2.cubicTo( + 258.796 * scaleX, + 801.75 * scaleY, + 248.847 * scaleX, + 848.935 * scaleY, + 254.781 * scaleX, + 878.261 * scaleY, + ); + path2.cubicTo( + 261.069 * scaleX, + 909.339 * scaleY, + 291.345 * scaleX, + 950.756 * scaleY, + 291.345 * scaleX, + 950.756 * scaleY, + ); + path2.cubicTo( + 291.345 * scaleX, + 950.756 * scaleY, + 282.736 * scaleX, + 1008.09 * scaleY, + 258.796 * scaleX, + 1032.97 * scaleY, + ); + path2.cubicTo( + 240.05 * scaleX, + 1052.46 * scaleY, + 198.137 * scaleX, + 1066.37 * scaleY, + 198.137 * scaleX, + 1066.37 * scaleY, + ); + path2.cubicTo( + 198.137 * scaleX, + 1066.37 * scaleY, + 166.656 * scaleX, + 1088.74 * scaleY, + 143.819 * scaleX, + 1097.44 * scaleY, + ); + path2.cubicTo( + 121.262 * scaleX, + 1106.03 * scaleY, + 83.3713 * scaleX, + 1110.33 * scaleY, + 83.3713 * scaleX, + 1110.33 * scaleY, + ); + path2.cubicTo( + 83.3713 * scaleX, + 1110.33 * scaleY, + 32.7909 * scaleX, + 1133.78 * scaleY, + 25.8826 * scaleX, + 1163.59 * scaleY, + ); + path2.cubicTo( + 18.5162 * scaleX, + 1195.38 * scaleY, + 59.4881 * scaleX, + 1240.1 * scaleY, + 59.4881 * scaleX, + 1240.1 * scaleY, + ); + path2.cubicTo( + 59.4881 * scaleX, + 1240.1 * scaleY, + 110.19 * scaleX, + 1264.23 * scaleY, + 143.819 * scaleX, + 1276.88 * scaleY, + ); + path2.cubicTo( + 172.99 * scaleX, + 1287.85 * scaleY, + 219.696 * scaleX, + 1301.61 * scaleY, + 219.696 * scaleX, + 1301.61 * scaleY, + ); + path2.cubicTo( + 219.696 * scaleX, + 1301.61 * scaleY, + 288.856 * scaleX, + 1304.54 * scaleY, + 312.964 * scaleX, + 1328.51 * scaleY, + ); + path2.cubicTo( + 330.039 * scaleX, + 1345.48 * scaleY, + 325.464 * scaleX, + 1397.51 * scaleY, + 325.464 * scaleX, + 1397.51 * scaleY, + ); + + final dashArray = CircularIntervalList(const [3.08, 13.1]); + final dashArray2 = CircularIntervalList(const [3.08, 13.1]); + + // Simply pass the Path objects directly to dashPath + final dashed = dashPath(path1, dashArray: dashArray); + final dashed2 = dashPath(path2, dashArray: dashArray2); + + canvas.drawPath(dashed, paint); + canvas.drawPath(dashed2, paint); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => false; +} diff --git a/lib/features/level/presentation/ui/widgets/level_widget.dart b/lib/features/level/presentation/ui/widgets/level_widget.dart new file mode 100644 index 0000000..f39fc81 --- /dev/null +++ b/lib/features/level/presentation/ui/widgets/level_widget.dart @@ -0,0 +1,121 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; + +enum LevelType { + unFinished, + finished, + current; + + static Map get image => { + LevelType.unFinished: MyAssets.level, + LevelType.finished: MyAssets.finishedLevel, + LevelType.current: MyAssets.currentLevel, + }; + + static Map get textShadowColor => { + LevelType.unFinished: Color(0XFF5B5B5B), + LevelType.finished: Color(0XFF096D7B), + LevelType.current: Color(0XFF91500D), + }; + + static Map get textColor => { + LevelType.unFinished: Color(0XFFEDEDED), + LevelType.finished: Color(0XFFFFF2D0), + LevelType.current: Color(0XFFFFF2D0), + }; +} + +class LevelWidget extends StatelessWidget { + const LevelWidget({ + super.key, + required this.level, + required this.type, + required this.chooseLevel, + this.onTap, + }); + + final LevelType type; + final LevelEntity level; + final LevelEntity? chooseLevel; + final Function(LevelEntity level, LevelType type)? onTap; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () => onTap?.call(level, type), + child: Stack( + alignment: Alignment.topCenter, + clipBehavior: Clip.none, + children: [ + MyImage( + image: LevelType.image[type] ?? MyAssets.level, + fit: BoxFit.cover, + size: setSize(context: context, tablet: 70, mobile: 44), + ), + ShaderMask( + blendMode: BlendMode.modulate, + shaderCallback: (bounds) => LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFFFFFFFF), + LevelType.textColor[type] ?? MyColors.white, + ], + ).createShader(bounds), + child: Text( + '${level.order ?? 0}', + maxLines: 1, + style: MYTextStyle.button1.copyWith( + fontSize: setSize(context: context, mobile: 24, tablet: 34), + shadows: [ + BoxShadow( + color: LevelType.textShadowColor[type] ?? MyColors.white, + offset: Offset(0, 2.97), + ) + ], + ), + ), + ), + if(level.id == chooseLevel?.id) + Positioned( + top: setSize(context: context, mobile: -20, tablet: -30), + child: MyImage( + image: MyAssets.location, + size: setSize(context: context,mobile: 26, tablet: 40), + ), + ), + if(type == LevelType.finished) + Positioned( + bottom: 0, + child: Container( + height: setSize(context: context, mobile: 17, tablet: 24), + width: setSize(context: context, mobile: 17, tablet: 24), + padding: EdgeInsets.all(3), + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all( + width: 1, + color: Color(0XFF3CFF3C), + ), + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFF48D336), + Color(0XFF2D7C23), + ], + ), + ), + child: MyImage(image: MyAssets.doneRounded), + ), + ), + ], + ), + ); + } +} diff --git a/lib/features/level/presentation/ui/widgets/play_button.dart b/lib/features/level/presentation/ui/widgets/play_button.dart new file mode 100644 index 0000000..bd41792 --- /dev/null +++ b/lib/features/level/presentation/ui/widgets/play_button.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; + +class PlayButton extends StatelessWidget { + const PlayButton({super.key, required this.level, this.onTap}); + + final LevelEntity level; + final Function(LevelEntity level)? onTap; + + @override + Widget build(BuildContext context) { + return MyInkwell( + onTap: () => onTap?.call(level), + child: Stack( + alignment: Alignment.center, + children: [ + MyImage(image: MyAssets.button2), + Positioned( + top: MySpaces.s2, + child: Row( + spacing: MySpaces.s4, + children: [ + MyImage(image: MyAssets.iconPlay), + ShaderMask( + blendMode: BlendMode.modulate, + shaderCallback: (bounds) => LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Color(0XFFF9601F), Color(0XFFD93D16)], + ).createShader(bounds), + child: Text( + context.translate.play, + maxLines: 1, + style: MYTextStyle.button1.copyWith( + shadows: [ + BoxShadow( + color: Color(0XFFFFFFAB).withValues(alpha: 0.40), + offset: Offset(0, 2.61), + ), + ], + ), + ), + ), + ], + ), + ), + Positioned( + bottom: MySpaces.s20, + child: Text( + '${context.translate.step} ${level.order ?? 0}', + style: MYTextStyle.matn3.copyWith(color: Color(0XFFD8490B)), + ), + ), + ], + ), + ); + } +} diff --git a/lib/features/level/presentation/ui/widgets/top_path.dart b/lib/features/level/presentation/ui/widgets/top_path.dart new file mode 100644 index 0000000..c6a24bc --- /dev/null +++ b/lib/features/level/presentation/ui/widgets/top_path.dart @@ -0,0 +1,99 @@ +import 'package:flutter/material.dart'; +import 'package:path_drawing/path_drawing.dart'; + +class TopPath extends StatelessWidget { + const TopPath({ + super.key, + this.width = 604, + this.height = 2651, + this.color = Colors.white, + }); + + final double width; + final double height; + final Color color; + + @override + Widget build(BuildContext context) { + return CustomPaint( + size: Size(width, height), + painter: _Path(color: color), + isComplex: true, + willChange: false, + ); + } +} + +class _Path extends CustomPainter { + _Path({required this.color}); + + final Color color; + + // SVG viewBox + static const double _vbW = 604.0; + static const double _vbH = 2651.0; + + // SVG stroke styling + static const double _strokeWidth = 4.62295; + static const List _dashPattern = [3.08, 13.1]; + + // The original SVG "d" attribute: + static const String _d = ''' +M323.844 1.5163 +C323.844 1.5163 254.064 132.635 209.041 216.483 +C167.229 294.353 105.588 327.363 101.557 415.655 +C96.6703 522.7 235.238 655.278 235.238 655.278 +C235.238 655.278 284.393 748.372 277.229 810.918 +C270.331 871.151 205.959 948.836 205.959 948.836 +C205.959 948.836 31.3055 963.687 11.4099 1046.3 +C-1.94798 1101.77 54.9427 1185.76 54.9427 1185.76 +C54.9427 1185.76 -32.6228 1326.5 19.8853 1386.09 +C63.1414 1435.18 185.541 1411.13 185.541 1411.13 +C185.541 1411.13 427.654 1354.52 472.164 1458.9 +C492.877 1507.48 472.164 1594.12 472.164 1594.12 +C472.164 1594.12 454.029 1680.13 464.844 1733.58 +C476.306 1790.23 531.492 1865.72 531.492 1865.72 +C531.492 1865.72 515.799 1970.22 472.164 2015.58 +C437.994 2051.1 361.598 2076.45 361.598 2076.45 +C361.598 2076.45 304.217 2117.23 262.59 2133.08 +C221.475 2148.74 152.41 2156.58 152.41 2156.58 +C152.41 2156.58 60.2151 2199.32 47.623 2253.66 +C34.196 2311.61 108.877 2393.12 108.877 2393.12 +C108.877 2393.12 201.293 2437.1 262.59 2460.15 +C315.761 2480.15 400.893 2505.23 400.893 2505.23 +C400.893 2505.23 509.508 2505.09 553.451 2548.76 +C584.574 2579.7 601.221 2650.47 601.221 2650.47 +'''; + + @override + void paint(Canvas canvas, Size size) { + // Scale to widgets size + final sx = size.width / _vbW; + final sy = size.height / _vbH; + canvas.save(); + canvas.scale(sx, sy); + + // Parse SVG path data to a Path + final Path original = parseSvgPathData(_d); + + // Apply dash pattern + final Path dashed = dashPath( + original, + dashArray: CircularIntervalList(_dashPattern), + ); + + // Stroke paint + final paint = Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = _strokeWidth + ..strokeCap = StrokeCap.butt + ..strokeJoin = StrokeJoin.miter + ..color = color; + + canvas.drawPath(dashed, paint); + canvas.restore(); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => false; +} diff --git a/lib/features/question/data/datasource/question_datasource.dart b/lib/features/question/data/datasource/question_datasource.dart new file mode 100644 index 0000000..831f844 --- /dev/null +++ b/lib/features/question/data/datasource/question_datasource.dart @@ -0,0 +1,62 @@ +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/question_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart'; +import 'package:hive/hive.dart'; + +abstract class IQuestionDatasource { + Future getLevel({required QuestionParams params}); + Future getNextLevel({required QuestionParams params}); +} + +/// Local +class QuestionDatasourceImpl implements IQuestionDatasource { + const QuestionDatasourceImpl(); + + @override + Future getLevel({required QuestionParams params}) async { + try { + final String selectedLanguage = LocalStorage.readData( + key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; + final Box levelBox = Hive.box(MyConstants.levelBox); + final TotalDataEntity findData = levelBox.values.singleWhere( + (e) => e.code == selectedLanguage, + orElse: () => TotalDataEntity(), + ); + final LevelEntity? findLevel = findData.levels?.singleWhere( + (e) => e.id == params.id, + orElse: () => LevelEntity(), + ); + return findLevel ?? LevelEntity(); + } catch (e) { + throw MyException(errorMessage: '$e'); + } + } + + @override + Future getNextLevel({required QuestionParams params}) async { + try { + final String selectedLanguage = LocalStorage.readData( + key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; + final int index = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel) ?? '1'); + final Box levelBox = Hive.box(MyConstants.levelBox); + final TotalDataEntity findData = levelBox.values.singleWhere( + (e) => e.code == selectedLanguage, + orElse: () => TotalDataEntity(), + ); + if(index > (findData.levels?.length ?? 0)){ + throw MyException(); + } + final LevelEntity? findLevel = findData.levels?.singleWhere( + (e) => e.order == index, + orElse: () => LevelEntity(), + ); + return findLevel ?? LevelEntity(); + } catch (e) { + throw MyException(errorMessage: '$e'); + } + } +} diff --git a/lib/features/question/data/model/answer_model.dart b/lib/features/question/data/model/answer_model.dart new file mode 100644 index 0000000..3cab02a --- /dev/null +++ b/lib/features/question/data/model/answer_model.dart @@ -0,0 +1,32 @@ +import 'package:hadi_hoda_flutter/features/question/data/model/file_model.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; + +class AnswerModel extends AnswerEntity { + AnswerModel({ + super.id, + super.title, + super.imageId, + super.imageInfo, + super.order, + super.isActive, + super.audioID, + super.audioInfo, + }); + + factory AnswerModel.fromJson(Map json) { + return AnswerModel( + id: json['id'], + title: json['title'], + imageId: json['image_id'], + imageInfo: json['image_info'] == null + ? null + : FileModel.fromJson(json['image_info']), + order: json['order'], + isActive: json['is_active'], + audioID: json['audio_id'], + audioInfo: json['audio_info'] == null + ? null + : FileModel.fromJson(json['audio_info']), + ); + } +} diff --git a/lib/features/question/data/model/file_model.dart b/lib/features/question/data/model/file_model.dart new file mode 100644 index 0000000..941f3f6 --- /dev/null +++ b/lib/features/question/data/model/file_model.dart @@ -0,0 +1,17 @@ +import 'package:hadi_hoda_flutter/features/question/domain/entity/file_entity.dart'; + +class FileModel extends FileEntity { + FileModel({ + super.filename, + super.size, + super.extension, + }); + + factory FileModel.fromJson(Map json) { + return FileModel( + filename: json['filename'], + size: json['size'], + extension: json['extension'], + ); + } +} diff --git a/lib/features/question/data/model/hadith_model.dart b/lib/features/question/data/model/hadith_model.dart new file mode 100644 index 0000000..5ffc8c0 --- /dev/null +++ b/lib/features/question/data/model/hadith_model.dart @@ -0,0 +1,21 @@ +import 'package:hadi_hoda_flutter/features/question/domain/entity/hadith_entity.dart'; + +class HadithModel extends HadithEntity { + HadithModel({ + super.id, + super.hadithText, + super.narratorName, + super.translation, + super.status, + }); + + factory HadithModel.fromJson(Map json) { + return HadithModel( + id: json['id'], + hadithText: json['hadith_text'], + narratorName: json['narrator_name'], + translation: json['translation'], + status: json['status'], + ); + } +} diff --git a/lib/features/question/data/model/question_model.dart b/lib/features/question/data/model/question_model.dart new file mode 100644 index 0000000..aa13de8 --- /dev/null +++ b/lib/features/question/data/model/question_model.dart @@ -0,0 +1,54 @@ +import 'package:hadi_hoda_flutter/features/question/data/model/answer_model.dart'; +import 'package:hadi_hoda_flutter/features/question/data/model/file_model.dart'; +import 'package:hadi_hoda_flutter/features/question/data/model/hadith_model.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/hadith_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart'; + +class QuestionModel extends QuestionEntity { + QuestionModel({ + super.id, + super.title, + super.audioId, + super.audioInfo, + super.order, + super.correctAnswer, + super.isActive, + super.answers, + super.correctAnswerText, + super.correctAnswerAudioId, + super.correctAnswerAudioInfo, + super.hadiths, + super.imageId, + super.imageInfo, + }); + + factory QuestionModel.fromJson(Map json) { + return QuestionModel( + id: json['id'], + title: json['title'], + audioId: json['audio_id'], + audioInfo: json['audio_info'] == null + ? null + : FileModel.fromJson(json['audio_info']), + order: json['order'], + correctAnswer: json['correct_answer'], + isActive: json['is_active'], + answers: json['answers'] + ?.map((e) => AnswerModel.fromJson(e)) + .toList(), + correctAnswerAudioId: json['correct_answer_audio_id'], + correctAnswerText: json['correct_answer_text'], + correctAnswerAudioInfo: json['correct_answer_audio_info'] == null + ? null + : FileModel.fromJson(json['correct_answer_audio_info']), + hadiths: json['hadiths'] + ?.map((e) => HadithModel.fromJson(e)) + .toList(), + imageId: json['image_id'], + imageInfo: json['image_info'] == null + ? null + : FileModel.fromJson(json['image_info']), + ); + } +} diff --git a/lib/features/question/data/repository_impl/question_repository_impl.dart b/lib/features/question/data/repository_impl/question_repository_impl.dart new file mode 100644 index 0000000..d1c8df7 --- /dev/null +++ b/lib/features/question/data/repository_impl/question_repository_impl.dart @@ -0,0 +1,45 @@ +import 'package:flutter/foundation.dart'; +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/question_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/data/datasource/question_datasource.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/repository/question_repository.dart'; + +class QuestionRepositoryImpl implements IQuestionRepository { + final IQuestionDatasource datasource; + + const QuestionRepositoryImpl(this.datasource); + + @override + Future> getLevel({required QuestionParams params}) async { + try { + final LevelEntity response = await datasource.getLevel(params: params); + return DataState.success(response); + } on MyException catch (e) { + return DataState.error(e); + } catch (e) { + if (kDebugMode) { + rethrow; + } else { + return DataState.error(MyException(errorMessage: '$e')); + } + } + } + + @override + Future> getNextLevel({required QuestionParams params}) async { + try { + final LevelEntity response = await datasource.getNextLevel(params: params); + return DataState.success(response); + } on MyException catch (e) { + return DataState.error(e); + } catch (e) { + if (kDebugMode) { + rethrow; + } else { + return DataState.error(MyException(errorMessage: '$e')); + } + } + } +} diff --git a/lib/features/question/domain/entity/answer_entity.dart b/lib/features/question/domain/entity/answer_entity.dart new file mode 100644 index 0000000..b9bb26b --- /dev/null +++ b/lib/features/question/domain/entity/answer_entity.dart @@ -0,0 +1,45 @@ +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/storage_path.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/file_entity.dart'; +import 'package:hive/hive.dart'; + +part 'answer_entity.g.dart'; + +@HiveType(typeId: 3) +class AnswerEntity extends HiveObject { + @HiveField(0) + int? id; + @HiveField(1) + String? title; + @HiveField(2) + String? imageId; + @HiveField(3) + FileEntity? imageInfo; + @HiveField(4) + int? order; + @HiveField(5) + bool? isActive; + @HiveField(6) + String? image; + @HiveField(7) + String? audioID; + @HiveField(8) + FileEntity? audioInfo; + @HiveField(9) + String? audio; + + AnswerEntity({ + this.id, + this.title, + this.imageId, + this.imageInfo, + this.order, + this.isActive, + this.audioID, + this.audioInfo, + }){ + image = '${StoragePath.documentDir.path}/answer_image/${imageInfo?.filename}'; + audio = '${StoragePath.documentDir.path}/${LocalStorage.readData(key: MyConstants.selectLanguage)}/answer_audio/${audioInfo?.filename}'; + } +} diff --git a/lib/features/question/domain/entity/answer_entity.g.dart b/lib/features/question/domain/entity/answer_entity.g.dart new file mode 100644 index 0000000..bcc224b --- /dev/null +++ b/lib/features/question/domain/entity/answer_entity.g.dart @@ -0,0 +1,68 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'answer_entity.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class AnswerEntityAdapter extends TypeAdapter { + @override + final int typeId = 3; + + @override + AnswerEntity read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return AnswerEntity( + id: fields[0] as int?, + title: fields[1] as String?, + imageId: fields[2] as String?, + imageInfo: fields[3] as FileEntity?, + order: fields[4] as int?, + isActive: fields[5] as bool?, + audioID: fields[7] as String?, + audioInfo: fields[8] as FileEntity?, + ) + ..image = fields[6] as String? + ..audio = fields[9] as String?; + } + + @override + void write(BinaryWriter writer, AnswerEntity obj) { + writer + ..writeByte(10) + ..writeByte(0) + ..write(obj.id) + ..writeByte(1) + ..write(obj.title) + ..writeByte(2) + ..write(obj.imageId) + ..writeByte(3) + ..write(obj.imageInfo) + ..writeByte(4) + ..write(obj.order) + ..writeByte(5) + ..write(obj.isActive) + ..writeByte(6) + ..write(obj.image) + ..writeByte(7) + ..write(obj.audioID) + ..writeByte(8) + ..write(obj.audioInfo) + ..writeByte(9) + ..write(obj.audio); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is AnswerEntityAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/features/question/domain/entity/asdasd.json b/lib/features/question/domain/entity/asdasd.json new file mode 100644 index 0000000..f7c7c7a --- /dev/null +++ b/lib/features/question/domain/entity/asdasd.json @@ -0,0 +1,53 @@ +{ + "result": [ + { + "id": 73, + "order": 1, + "title": "Stage One", + "questions": [ + { + "id": 594, + "title": "Hadi and Morteza are playing soccer in the yard. Hadi kicks the ball hard, and it goes over the neighbor's wall. Hadi gets a ladder to climb up, but Morteza says, \"Wait! We should ask for permission first.\" Hadi climbs up anyway to get the ball. Suddenly, he sees the neighbor looking right at him! What should Hadi do?", + "audio_id": "31775a6d74", + "audio_info": { + "filename": "level_01_question_01_en.mp3", + "size": 352802, + "extension": ".mp3" + }, + "order": 1, + "correct_answer": 3, + "correct_answer_text": "That is correct! Great job!", + "correct_answer_audio_id": "9d89be8fd6", + "correct_answer_audio_info": { + "filename": "level_01_question_01_correct_en.mp3", + "size": 31391, + "extension": ".mp3" + }, + "hadiths": [], + "is_active": true, + "answers": [ + { + "id": 2335, + "title": "Tell Morteza, \"Come up here! Look, the neighbor is eating chicken!\"", + "image_id": "7eb7047f81", + "image_info": { + "filename": "level_01_question_01_answer_01_image.jpg", + "size": 190516, + "extension": ".jpg" + }, + "audio_id": "9a3c564d47", + "audio_info": { + "filename": "level_01_question_01_answer_01_en.mp3", + "size": 74859, + "extension": ".mp3" + }, + "order": 1, + "is_active": true + } + ] + } + ] + } + ], + "levels_count": 5 +} \ No newline at end of file diff --git a/lib/features/question/domain/entity/file_entity.dart b/lib/features/question/domain/entity/file_entity.dart new file mode 100644 index 0000000..6faaf73 --- /dev/null +++ b/lib/features/question/domain/entity/file_entity.dart @@ -0,0 +1,19 @@ +import 'package:hive/hive.dart'; + +part 'file_entity.g.dart'; + +@HiveType(typeId: 4) +class FileEntity extends HiveObject { + @HiveField(0) + String? filename; + @HiveField(1) + int? size; + @HiveField(2) + String? extension; + + FileEntity({ + this.filename, + this.size, + this.extension, + }); +} diff --git a/lib/features/question/domain/entity/file_entity.g.dart b/lib/features/question/domain/entity/file_entity.g.dart new file mode 100644 index 0000000..ef3f994 --- /dev/null +++ b/lib/features/question/domain/entity/file_entity.g.dart @@ -0,0 +1,47 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'file_entity.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class FileEntityAdapter extends TypeAdapter { + @override + final int typeId = 4; + + @override + FileEntity read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return FileEntity( + filename: fields[0] as String?, + size: fields[1] as int?, + extension: fields[2] as String?, + ); + } + + @override + void write(BinaryWriter writer, FileEntity obj) { + writer + ..writeByte(3) + ..writeByte(0) + ..write(obj.filename) + ..writeByte(1) + ..write(obj.size) + ..writeByte(2) + ..write(obj.extension); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is FileEntityAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/features/question/domain/entity/hadith_entity.dart b/lib/features/question/domain/entity/hadith_entity.dart new file mode 100644 index 0000000..72abd4b --- /dev/null +++ b/lib/features/question/domain/entity/hadith_entity.dart @@ -0,0 +1,25 @@ +import 'package:hive/hive.dart'; + +part 'hadith_entity.g.dart'; + +@HiveType(typeId: 5) +class HadithEntity extends HiveObject { + @HiveField(0) + int? id; + @HiveField(1) + String? hadithText; + @HiveField(2) + String? narratorName; + @HiveField(3) + String? translation; + @HiveField(4) + String? status; + + HadithEntity({ + this.id, + this.hadithText, + this.narratorName, + this.translation, + this.status, + }); +} diff --git a/lib/features/question/domain/entity/hadith_entity.g.dart b/lib/features/question/domain/entity/hadith_entity.g.dart new file mode 100644 index 0000000..8ceaf78 --- /dev/null +++ b/lib/features/question/domain/entity/hadith_entity.g.dart @@ -0,0 +1,53 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'hadith_entity.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class HadithEntityAdapter extends TypeAdapter { + @override + final int typeId = 5; + + @override + HadithEntity read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return HadithEntity( + id: fields[0] as int?, + hadithText: fields[1] as String?, + narratorName: fields[2] as String?, + translation: fields[3] as String?, + status: fields[4] as String?, + ); + } + + @override + void write(BinaryWriter writer, HadithEntity obj) { + writer + ..writeByte(5) + ..writeByte(0) + ..write(obj.id) + ..writeByte(1) + ..write(obj.hadithText) + ..writeByte(2) + ..write(obj.narratorName) + ..writeByte(3) + ..write(obj.translation) + ..writeByte(4) + ..write(obj.status); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is HadithEntityAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/features/question/domain/entity/question_entity.dart b/lib/features/question/domain/entity/question_entity.dart new file mode 100644 index 0000000..4effad3 --- /dev/null +++ b/lib/features/question/domain/entity/question_entity.dart @@ -0,0 +1,68 @@ +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/storage_path.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/file_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/hadith_entity.dart'; +import 'package:hive/hive.dart'; + +part 'question_entity.g.dart'; + +@HiveType(typeId: 2) +class QuestionEntity extends HiveObject { + @HiveField(0) + int? id; + @HiveField(1) + String? title; + @HiveField(2) + String? audioId; + @HiveField(3) + FileEntity? audioInfo; + @HiveField(4) + int? order; + @HiveField(5) + int? correctAnswer; + @HiveField(6) + String? correctAnswerText; + @HiveField(7) + String? correctAnswerAudioId; + @HiveField(8) + FileEntity? correctAnswerAudioInfo; + @HiveField(9) + List? hadiths; + @HiveField(10) + bool? isActive; + @HiveField(11) + List? answers; + @HiveField(12) + String? audio; + @HiveField(13) + String? correctAudio; + @HiveField(14) + String? imageId; + @HiveField(15) + FileEntity? imageInfo; + @HiveField(16) + String? image; + + QuestionEntity({ + this.id, + this.title, + this.audioId, + this.audioInfo, + this.order, + this.correctAnswer, + this.isActive, + this.answers, + this.hadiths, + this.correctAnswerAudioId, + this.correctAnswerText, + this.correctAnswerAudioInfo, + this.imageId, + this.imageInfo, + }){ + audio = '${StoragePath.documentDir.path}/${LocalStorage.readData(key: MyConstants.selectLanguage)}/question_audio/${audioInfo?.filename}'; + correctAudio = '${StoragePath.documentDir.path}/${LocalStorage.readData(key: MyConstants.selectLanguage)}/correct_answer_audio/${correctAnswerAudioInfo?.filename}'; + image = '${StoragePath.documentDir.path}/${LocalStorage.readData(key: MyConstants.selectLanguage)}/question_image/${imageInfo?.filename}'; + } +} diff --git a/lib/features/question/domain/entity/question_entity.g.dart b/lib/features/question/domain/entity/question_entity.g.dart new file mode 100644 index 0000000..8b31e5a --- /dev/null +++ b/lib/features/question/domain/entity/question_entity.g.dart @@ -0,0 +1,89 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'question_entity.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class QuestionEntityAdapter extends TypeAdapter { + @override + final int typeId = 2; + + @override + QuestionEntity read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return QuestionEntity( + id: fields[0] as int?, + title: fields[1] as String?, + audioId: fields[2] as String?, + audioInfo: fields[3] as FileEntity?, + order: fields[4] as int?, + correctAnswer: fields[5] as int?, + isActive: fields[10] as bool?, + answers: (fields[11] as List?)?.cast(), + hadiths: (fields[9] as List?)?.cast(), + correctAnswerAudioId: fields[7] as String?, + correctAnswerText: fields[6] as String?, + correctAnswerAudioInfo: fields[8] as FileEntity?, + imageId: fields[14] as String?, + imageInfo: fields[15] as FileEntity?, + ) + ..audio = fields[12] as String? + ..correctAudio = fields[13] as String? + ..image = fields[16] as String?; + } + + @override + void write(BinaryWriter writer, QuestionEntity obj) { + writer + ..writeByte(17) + ..writeByte(0) + ..write(obj.id) + ..writeByte(1) + ..write(obj.title) + ..writeByte(2) + ..write(obj.audioId) + ..writeByte(3) + ..write(obj.audioInfo) + ..writeByte(4) + ..write(obj.order) + ..writeByte(5) + ..write(obj.correctAnswer) + ..writeByte(6) + ..write(obj.correctAnswerText) + ..writeByte(7) + ..write(obj.correctAnswerAudioId) + ..writeByte(8) + ..write(obj.correctAnswerAudioInfo) + ..writeByte(9) + ..write(obj.hadiths) + ..writeByte(10) + ..write(obj.isActive) + ..writeByte(11) + ..write(obj.answers) + ..writeByte(12) + ..write(obj.audio) + ..writeByte(13) + ..write(obj.correctAudio) + ..writeByte(14) + ..write(obj.imageId) + ..writeByte(15) + ..write(obj.imageInfo) + ..writeByte(16) + ..write(obj.image); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is QuestionEntityAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/features/question/domain/repository/question_repository.dart b/lib/features/question/domain/repository/question_repository.dart new file mode 100644 index 0000000..507d38b --- /dev/null +++ b/lib/features/question/domain/repository/question_repository.dart @@ -0,0 +1,9 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/question_params.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; + +abstract class IQuestionRepository { + Future> getLevel({required QuestionParams params}); + Future> getNextLevel({required QuestionParams params}); +} diff --git a/lib/features/question/domain/usecases/get_level_usecase.dart b/lib/features/question/domain/usecases/get_level_usecase.dart new file mode 100644 index 0000000..4310bdf --- /dev/null +++ b/lib/features/question/domain/usecases/get_level_usecase.dart @@ -0,0 +1,17 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/question_params.dart'; +import 'package:hadi_hoda_flutter/core/usecase/usecase.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/repository/question_repository.dart'; + +class GetLevelUseCase implements UseCase { + final IQuestionRepository repository; + + const GetLevelUseCase(this.repository); + + @override + Future> call(QuestionParams params) { + return repository.getLevel(params: params); + } +} diff --git a/lib/features/question/domain/usecases/get_next_level_usecase.dart b/lib/features/question/domain/usecases/get_next_level_usecase.dart new file mode 100644 index 0000000..3882c1e --- /dev/null +++ b/lib/features/question/domain/usecases/get_next_level_usecase.dart @@ -0,0 +1,17 @@ +import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; +import 'package:hadi_hoda_flutter/core/params/question_params.dart'; +import 'package:hadi_hoda_flutter/core/usecase/usecase.dart'; +import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/repository/question_repository.dart'; + +class GetNextLevelUseCase implements UseCase { + final IQuestionRepository repository; + + const GetNextLevelUseCase(this.repository); + + @override + Future> call(QuestionParams params) { + return repository.getNextLevel(params: params); + } +} diff --git a/lib/features/question/presentation/bloc/question_bloc.dart b/lib/features/question/presentation/bloc/question_bloc.dart new file mode 100644 index 0000000..a832e3f --- /dev/null +++ b/lib/features/question/presentation/bloc/question_bloc.dart @@ -0,0 +1,286 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/params/question_params.dart'; +import 'package:hadi_hoda_flutter/core/routers/hero_dialog_route.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/core/services/audio_service.dart'; +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; +import 'package:hadi_hoda_flutter/core/widgets/dialog/hadith_dialog.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/usecases/get_level_usecase.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/usecases/get_next_level_usecase.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_event.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_state.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/screens/answer_screen.dart'; +import 'package:showcaseview/showcaseview.dart'; + +class QuestionBloc extends Bloc { + /// ------------constructor------------ + QuestionBloc( + this._getLevelUseCase, + this._getNextLevelUseCase, + this._mainAudioService, + this._effectAudioService, + ) : super(QuestionState()) { + volumeStream = _mainAudioService.volumeStream(); + playingStream = _mainAudioService.playingStream(); + stopMusic(); + registerShowCase(); + on(_getLevelEvent); + on(_chooseAnswerEvent); + } + + @override + Future close() { + unRegisterShowCase(); + animationController.dispose(); + return super.close(); + } + + /// ------------UseCases------------ + final GetLevelUseCase _getLevelUseCase; + final GetNextLevelUseCase _getNextLevelUseCase; + + /// ------------Variables------------ + final Map showCaseKey = { + 'answer_key_0': GlobalKey(), + 'answer_key_1': GlobalKey(), + 'answer_key_2': GlobalKey(), + 'answer_key_3': GlobalKey(), + 'notif_key_0': GlobalKey(), + 'notif_key_1': GlobalKey(), + 'notif_key_2': GlobalKey(), + 'notif_key_3': GlobalKey(), + 'stepper_key': GlobalKey(), + 'hadith_key': GlobalKey(), + 'guide_key': GlobalKey(), + }; + late final Stream volumeStream; + late final Stream playingStream; + + /// ------------Controllers------------ + final AudioService _mainAudioService; + final AudioService _effectAudioService; + late final AnimationController animationController; + + /// ------------Functions------------ + void registerShowCase() { + try { + ShowcaseView.register( + onStart: (showcaseIndex, key) { + LocalStorage.saveData(key: MyConstants.firstShowcase, value: 'true'); + }, + ); + } catch (_) {} + } + + void unRegisterShowCase() { + try { + ShowcaseView.get().unregister(); + } catch (_) {} + } + + + void startShowcase() { + if (LocalStorage.readData(key: MyConstants.firstShowcase) != 'true') { + try { + ShowcaseView.get().startShowCase([ + showCaseKey['answer_key_1']!, + showCaseKey['notif_key_0']!, + showCaseKey['stepper_key']!, + showCaseKey['hadith_key']!, + showCaseKey['guide_key']!, + ]); + } catch (_) {} + } + } + + void showHadith({required BuildContext context}) { + showHadithDialog( + context: context, + hadith: state.currentQuestion?.hadiths ?? [], + ); + } + + void goToHomePage({required BuildContext context}) { + context.goNamed(Routes.homePage); + } + + void goToLevelPage({required BuildContext context}) { + context.goNamed(Routes.levelPage); + } + + Future playDiamondAudio() async { + await _effectAudioService.setAudio(assetPath: MyAudios.diamondEnd); + await _effectAudioService.play(); + } + + Future stopMusic() async { + await Future.wait([ + _mainAudioService.stop(), + _mainAudioService.setLoopMode(isLoop: false), + ]); + } + + Future playWrongAudio() async { + await _effectAudioService.setAudio(assetPath: MyAudios.incorrectAnswer); + await _effectAudioService.play(); + } + + Future playAnswerAudio({String? audio}) async { + await _mainAudioService.setAudio(filePath: audio); + await _mainAudioService.play(); + } + + Future playQuestionAudio() async { + await _mainAudioService.setAudio(filePath: state.currentQuestion?.audio); + await _mainAudioService.play(); + } + + Future changeMute() async { + await Future.wait([ + _mainAudioService.changeMute(), + _effectAudioService.changeMute(), + ]); + } + + // Future showQueueAnswer() async { + // final List answers = state.currentQuestion?.answers ?? []; + // if (answers.isNotEmpty) { + // answers.removeWhere((e) => e.imageId == null); + // } + // for (final answer in answers) { + // await Future.delayed(const Duration(milliseconds: 500), () async { + // if (MyContext.get.mounted) { + // await showAnswerDialog( + // context: MyContext.get, + // answerEntity: answer, + // autoClose: true, + // ); + // } + // }); + // } + // } + + Future showAnswerDialog({ + required BuildContext context, + required AnswerEntity answerEntity, + String? correctAudio, + bool showConfetti = false, + bool autoClose = false, + }) async { + await Navigator.of(context).push( + HeroDialogRoute( + builder: (dialogContext) { + return AnswerScreen( + correctAudio: correctAudio, + answerEntity: answerEntity, + showConfetti: showConfetti, + autoClose: autoClose, + ); + }, + ), + ); + } + + Future getNextLevelEvent({required BuildContext context}) async { + await _getNextLevelUseCase(QuestionParams()).then((value) => value.fold( + (data) { + context.pushNamed( + Routes.questionPage, + pathParameters: {'id': '${data.id}'}, + ); + }, + (error) { + goToLevelPage(context: MyContext.get); + }, + ), + ); + } + + /// ------------Event Calls------------ + FutureOr _getLevelEvent(GetLevelEvent event, Emitter emit) async { + await _getLevelUseCase(QuestionParams(id: int.parse(event.id ?? '0'))).then( + (value) { + value.fold( + (data) async { + final LevelEntity level = LevelEntity( + id: data.id, + order: data.order, + title: data.title, + questions: [ + ...?data.questions, + QuestionEntity(order: (data.questions?.length ?? 0) + 1) + ], + ); + emit(state.copyWith( + getQuestionStatus: BaseComplete(''), + levelEntity: level, + currentQuestion: data.questions?.first, + showAnswers: true + )); + await playQuestionAudio(); + animationController.forward().then((value) { + startShowcase(); + }); + }, + (error) { + emit(state.copyWith(getQuestionStatus: BaseError(error.errorMessage))); + }, + ); + }, + ); + } + + FutureOr _chooseAnswerEvent(ChooseAnswerEvent event, + Emitter emit,) async { + emit(state.copyWith(correctAnswer: event.chooseCorrectAnswer)); + + if (event.chooseCorrectAnswer) { + animationController.reverse(); + await showAnswerDialog( + context: MyContext.get, + correctAudio: state.currentQuestion?.correctAudio, + answerEntity: state.currentQuestion?.answers?.singleWhere((e) => + e.order == event.correctAnswer) ?? AnswerEntity(), + showConfetti: true, + ); + await Future.delayed(Duration(seconds: 1), () async { + final QuestionEntity? findPreQuestion = state.currentQuestion; + final int findIndex = (findPreQuestion?.order ?? 1); + emit( + state.copyWith( + currentQuestion: state.levelEntity?.questions?[findIndex], + ), + ); + if (state.currentQuestion?.order == + state.levelEntity?.questions?.length) { + playDiamondAudio(); + int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel) ?? '1'); + if (state.levelEntity?.order == currentLevel) { + ++currentLevel; + await LocalStorage.saveData( + key: MyConstants.currentLevel, + value: '$currentLevel', + ); + } + } else { + await playQuestionAudio(); + animationController.forward(); + } + }); + } else { + playWrongAudio(); + } + } +} diff --git a/lib/features/question/presentation/bloc/question_event.dart b/lib/features/question/presentation/bloc/question_event.dart new file mode 100644 index 0000000..428a4f4 --- /dev/null +++ b/lib/features/question/presentation/bloc/question_event.dart @@ -0,0 +1,19 @@ +import 'package:flutter/cupertino.dart'; + +sealed class QuestionEvent { + const QuestionEvent(); +} + +class GetLevelEvent extends QuestionEvent { + final String? id; + final BuildContext context; + const GetLevelEvent(this.id, this.context); +} + +class ChooseAnswerEvent extends QuestionEvent { + final bool chooseCorrectAnswer; + final int correctAnswer; + final BuildContext context; + const ChooseAnswerEvent(this.chooseCorrectAnswer, this.correctAnswer, this.context); +} + diff --git a/lib/features/question/presentation/bloc/question_state.dart b/lib/features/question/presentation/bloc/question_state.dart new file mode 100644 index 0000000..47c4764 --- /dev/null +++ b/lib/features/question/presentation/bloc/question_state.dart @@ -0,0 +1,35 @@ +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart'; + +class QuestionState { + final BaseStatus getQuestionStatus; + final LevelEntity? levelEntity; + final QuestionEntity? currentQuestion; + final bool? correctAnswer; + final bool showAnswers; + + const QuestionState({ + this.getQuestionStatus = const BaseInit(), + this.levelEntity, + this.currentQuestion, + this.correctAnswer, + this.showAnswers = false, + }); + + QuestionState copyWith({ + BaseStatus? getQuestionStatus, + LevelEntity? levelEntity, + QuestionEntity? currentQuestion, + bool? correctAnswer, + bool? showAnswers, + }) { + return QuestionState( + getQuestionStatus: getQuestionStatus ?? this.getQuestionStatus, + levelEntity: levelEntity ?? this.levelEntity, + currentQuestion: currentQuestion ?? this.currentQuestion, + correctAnswer: correctAnswer, + showAnswers: showAnswers ?? this.showAnswers, + ); + } +} diff --git a/lib/features/question/presentation/ui/question_page.dart b/lib/features/question/presentation/ui/question_page.dart new file mode 100644 index 0000000..2feda58 --- /dev/null +++ b/lib/features/question/presentation/ui/question_page.dart @@ -0,0 +1,113 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/gap.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_down_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/pop_scope/my_pop_scope.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_bloc.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_state.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/screens/diamond_screen.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/screens/question_screen.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/widgets/glassy_button.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/widgets/question_title.dart'; + +class QuestionPage extends StatelessWidget { + const QuestionPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: MyPopScope( + child: Directionality( + textDirection: TextDirection.ltr, + child: Container( + height: context.heightScreen, + width: context.widthScreen, + padding: EdgeInsets.symmetric( + horizontal: setSize(context: context, + mobile: MySpaces.s16, + tablet: MySpaces.s30) ?? 0, + ), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Color(0XFF6930DA), Color(0XFF263AA1)], + ), + image: DecorationImage( + image: AssetImage(MyAssets.pattern), + scale: 3, + repeat: ImageRepeat.repeat, + colorFilter: ColorFilter.mode( + Colors.black.withValues(alpha: 0.3), + BlendMode.srcIn, + ), + ), + ), + child: Column( + children: [ + setPlatform(android: MySpaces.s20, iOS: 50)?.gapHeight ?? SizedBox.shrink(), + _topButtons(context), + MySpaces.s10.gapHeight, + Expanded( + child: BlocBuilder( + buildWhen: (previous, current) => + (previous.currentQuestion?.order != + current.currentQuestion?.order), + builder: (context, state) { + if (state.currentQuestion?.order == + state.levelEntity?.questions?.length) { + return DiamondScreen(); + } else { + return QuestionScreen(); + } + }, + ), + ), + setPlatform(android: MySpaces.s20,)?.gapHeight ?? SizedBox.shrink(), + ], + ), + ), + ), + ), + ); + } + + Widget _topButtons(BuildContext context) { + return SlideDownFade( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GlassyButton( + image: MyAssets.home, + audio: MyAudios.back, + onTap: () => + context.read().goToHomePage(context: context), + ), + BlocBuilder( + buildWhen: (previous, current) => + previous.currentQuestion?.id != current.currentQuestion?.id, + builder: (context, state) => QuestionTitle( + step: state.levelEntity?.order, + currentQuestion: state.currentQuestion?.order, + questionLength: state.levelEntity?.questions?.length, + ), + ), + StreamBuilder( + initialData: 1, + stream: context.read().volumeStream, + builder: (context, snapshot) => GlassyButton( + image: snapshot.data == 0 ? MyAssets.unMusic : MyAssets.music, + onTap: () => context.read().changeMute(), + ), + ), + ], + ), + ); + } +} diff --git a/lib/features/question/presentation/ui/screens/answer_screen.dart b/lib/features/question/presentation/ui/screens/answer_screen.dart new file mode 100644 index 0000000..a1ac4c9 --- /dev/null +++ b/lib/features/question/presentation/ui/screens/answer_screen.dart @@ -0,0 +1,118 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_animations.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/services/audio_service.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_context.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/answer_box/answer_box_show.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; +import 'package:hadi_hoda_flutter/init_bindings.dart'; +import 'package:lottie/lottie.dart'; + +class AnswerScreen extends StatefulWidget { + const AnswerScreen({ + super.key, + required this.answerEntity, + required this.showConfetti, + required this.autoClose, + this.correctAudio, + }); + + final AnswerEntity answerEntity; + final String? correctAudio; + final bool showConfetti; + final bool autoClose; + + @override + State createState() => _AnswerScreenState(); +} + +class _AnswerScreenState extends State { + + final AudioService audioService = locator( + instanceName: MyConstants.mainAudioService, + ); + + @override + void initState() { + super.initState(); + initWidget(); + } + + Future initWidget() async { + if (widget.showConfetti) { + await playCorrectAudio(); + if (MyContext.get.mounted && MyContext.get.canPop()) { + MyContext.get.pop(); + } + } else { + await playAudio(); + if (widget.autoClose) { + if (MyContext.get.mounted && MyContext.get.canPop()) { + MyContext.get.pop(); + } + } + } + } + + Future playCorrectAudio() async { + await audioService.setAudio(filePath: widget.correctAudio); + await audioService.play(); + } + + Future playAudio() async { + await audioService.setAudio(filePath: widget.answerEntity.audio); + await audioService.play(); + } + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.center, + children: [ + Center( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: setSize(context: context, + mobile: MySpaces.s16, + tablet: MySpaces.s30) ?? 0, + ), + child: AnswerBoxShow( + answer: widget.answerEntity, + index: widget.answerEntity.order ?? 0, + onNotifTap: (answer) => playAudio(), + ), + ), + ), + Positioned( + bottom: setPlatform(android: MySpaces.s30, iOS: MySpaces.s12), + child: TextButton( + onPressed: () { + context.pop(); + }, + style: TextButton.styleFrom( + foregroundColor: MyColors.white.withValues(alpha: 0.7), + ), + child: Text( + context.translate.skip, + style: MYTextStyle.button2 + ), + ), + ), + if (widget.showConfetti) ...{ + Lottie.asset( + MyAnimations.confetti, + height: context.heightScreen, + fit: BoxFit.cover, + ), + }, + ], + ); + } +} diff --git a/lib/features/question/presentation/ui/screens/diamond_screen.dart b/lib/features/question/presentation/ui/screens/diamond_screen.dart new file mode 100644 index 0000000..2a236b7 --- /dev/null +++ b/lib/features/question/presentation/ui/screens/diamond_screen.dart @@ -0,0 +1,177 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_animations.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/gap.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/ship_anim.dart'; +import 'package:hadi_hoda_flutter/core/widgets/button/my_white_button.dart'; +import 'package:hadi_hoda_flutter/core/widgets/button/my_yellow_button.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_bloc.dart'; +import 'package:lottie/lottie.dart'; + +class DiamondScreen extends StatelessWidget { + const DiamondScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Stack( + alignment: Alignment.center, + children: [ + Stack( + alignment: Alignment.center, + children: [ + MyImage( + image: MyAssets.behindDiamond, + size: context.widthScreen * 1.5, + fit: BoxFit.cover, + ), + Lottie.asset( + MyAnimations.lightPurple, + ), + MyImage( + image: MyAssets.diamondBig, + ), + Positioned( + bottom: setSize( + context: context, + mobile: context.heightScreen * 0.15, + tablet: context.heightScreen * 0.2, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translate.you_win, + style: MYTextStyle.titr0, + ), + ShaderMask( + shaderCallback: (bounds) => LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + MyColors.white, + Color(0XFF63D4F9), + ], + ).createShader(bounds), + child: Text( + context.translate.you_got_diamond, + style: MYTextStyle.titr1.copyWith( + shadows: [ + BoxShadow( + color: MyColors.black.withValues(alpha: 0.25), + offset: Offset(0, 1.22), + blurRadius: 0.82, + ), + ], + ), + ), + ), + ], + ), + ), + ], + ), + Positioned( + top: setSize(context: context, mobile: 120, tablet: 220), + right: setSize(context: context, mobile: MySpaces.s16, tablet: 60), + child: Stack( + children: [ + Transform.rotate( + angle: 0.4, + child: MyImage( + image: MyAssets.diamondBig, + size: setSize(context: context, mobile: 80, tablet: 150), + ), + ), + ClipRRect( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 3, sigmaY: 3), + child: SizedBox( + width: setSize(context: context, mobile: 80, tablet: 200), + height: setSize(context: context, mobile: 80, tablet: 200), + ), + ), + ), + ], + ), + ), + Positioned( + top: setSize(context: context, mobile: 100, tablet: 200), + left: setSize(context: context, mobile: 16, tablet: 60), + child: Stack( + children: [ + Transform.rotate( + angle: -0.6, + child: MyImage( + image: MyAssets.diamondBig, + size: setSize(context: context, mobile: 60, tablet: 100), + ), + ), + ClipRRect( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), + child: SizedBox( + width: setSize(context: context, mobile: 80, tablet: 200), + height: setSize(context: context, mobile: 80, tablet: 200), + ), + ), + ), + ], + ), + ), + ], + ), + ), + Stack( + alignment: Alignment.center, + clipBehavior: Clip.none, + children: [ + _ship(context), + _buttons(context), + ], + ), + MySpaces.s20.gapHeight, + ], + ); + } + + + Widget _ship(BuildContext context) { + return ShipAnim( + child: MyImage(image: MyAssets.ship), + ); + } + + Widget _buttons(BuildContext context) { + return Row( + spacing: MySpaces.s12, + children: [ + Expanded( + child: MyWhiteButton( + onTap: () => context.read().goToLevelPage(context: context), + title: context.translate.map, + ), + ), + Expanded( + child: MyYellowButton( + onTap: () => context.read().getNextLevelEvent(context: context), + title: context.translate.next, + ), + ), + ], + ); + } +} diff --git a/lib/features/question/presentation/ui/screens/question_screen.dart b/lib/features/question/presentation/ui/screens/question_screen.dart new file mode 100644 index 0000000..1d6b9da --- /dev/null +++ b/lib/features/question/presentation/ui/screens/question_screen.dart @@ -0,0 +1,195 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/gap.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/fade_anim.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/globe_animation.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_anim.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; +import 'package:hadi_hoda_flutter/core/widgets/answer_box/answer_box.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/showcase/my_showcase_widget.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_bloc.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_event.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/bloc/question_state.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/widgets/glassy_button.dart'; +import 'package:hadi_hoda_flutter/features/question/presentation/ui/widgets/question_stepper.dart'; + +class QuestionScreen extends StatefulWidget { + const QuestionScreen({super.key}); + + @override + State createState() => _QuestionScreenState(); +} + +class _QuestionScreenState extends State with SingleTickerProviderStateMixin { + + @override + void initState() { + super.initState(); + context.read().animationController = AnimationController( + vsync: this, + duration: Duration(milliseconds: 500), + reverseDuration: Duration(milliseconds: 500), + ); + } + + @override + Widget build(BuildContext context) { + return Column( + children: [ + _stepper(), + _titles(context), + MySpaces.s20.gapHeight, + _answers(context), + _bottom(context), + ], + ); + } + + Widget _stepper() { + return BlocBuilder( + buildWhen: (previous, current) => + previous.currentQuestion?.id != current.currentQuestion?.id, + builder: (context, state) => MyShowcaseWidget( + globalKey: context.read().showCaseKey['stepper_key']!, + description: context.translate.showcase_stepper, + child: FadeAnim( + child: QuestionStepper( + length: state.levelEntity?.questions?.length ?? 0, + currentStep: state.currentQuestion?.order ?? 1, + ), + ), + ), + ); + } + + Widget _titles(BuildContext context) { + return BlocBuilder( + buildWhen: (previous, current) => + previous.currentQuestion?.id != current.currentQuestion?.id, + builder: (context, state) => + FadeAnim( + child: AutoSizeText( + state.currentQuestion?.title ?? '', + textAlign: TextAlign.center, + maxLines: 4, + maxFontSize: 20, + minFontSize: 16, + style: MYTextStyle.titr1.copyWith( + shadows: [ + BoxShadow( + offset: Offset(0, 2), + color: MyColors.black.withValues(alpha: 0.25), + ), + ], + ), + ), + ), + ); + } + + Expanded _answers(BuildContext context) { + return Expanded( + child: BlocBuilder( + buildWhen: (previous, current) => + previous.currentQuestion?.id != current.currentQuestion?.id, + builder: (context, state) => GridView.builder( + itemCount: state.currentQuestion?.answers?.length ?? 0, + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: EdgeInsets.symmetric( + horizontal: setSize(context: context, tablet: 70) ?? 0, + ), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: MySpaces.s20, + mainAxisSpacing: 80, + ), + itemBuilder: (context, index) => + state.currentQuestion?.answers?[index].imageId == null + ? SizedBox.shrink() + : SlideAnim( + key: Key('${state.currentQuestion?.id}'), + controller: context.read().animationController, + index: index, + child: MyShowcaseWidget( + globalKey: context.read().showCaseKey['answer_key_$index']!, + description: context.translate.showcase_answer, + child: AnswerBox( + globalKey: context.read().showCaseKey['notif_key_$index']!, + index: state.currentQuestion?.answers?[index].order ?? 1, + answer: + state.currentQuestion?.answers?[index] ?? + AnswerEntity(), + correctAnswer: state.currentQuestion?.correctAnswer ?? 0, + onNotifTap: (AnswerEntity answer) { + context.read().showAnswerDialog( + context: context, + answerEntity: answer, + ); + }, + onTap: (isCorrect, correctAnswer) => + context.read().add( + ChooseAnswerEvent(isCorrect, correctAnswer, context), + ), + ), + ), + ), + ), + ), + ); + } + + Widget _bottom(BuildContext context) { + return SlideUpFade( + child: SizedBox( + width: context.widthScreen, + child: Stack( + alignment: AlignmentDirectional.centerStart, + children: [ + MyShowcaseWidget( + globalKey: context.read().showCaseKey['guide_key']!, + description: context.translate.showcase_guide, + type: ShowcaseTooltipType.top, + child: StreamBuilder( + initialData: false, + stream: context.read().playingStream, + builder: (context, snapshot) => GlobeAnimation( + state: snapshot.data ?? false, + child: MyImage( + image: MyAssets.globe, + fit: BoxFit.cover, + size: setSize(context: context, tablet: 120), + ), + ), + ), + ), + PositionedDirectional( + end: 0, + child: MyShowcaseWidget( + globalKey: context.read().showCaseKey['hadith_key']!, + type: ShowcaseTooltipType.topLeft, + description: context.translate.showcase_hadith, + child: GlassyButton( + image: MyAssets.leaf, + onTap: () => + context.read().showHadith(context: context), + ), + ), + ), + ], + ), + ), + ); + } +} + diff --git a/lib/features/question/presentation/ui/widgets/glassy_button.dart b/lib/features/question/presentation/ui/widgets/glassy_button.dart new file mode 100644 index 0000000..2e9cc1c --- /dev/null +++ b/lib/features/question/presentation/ui/widgets/glassy_button.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; + +class GlassyButton extends StatelessWidget { + const GlassyButton({super.key, required this.image, this.onTap, this.audio}); + + final String image; + final VoidCallback? onTap; + final String? audio; + + @override + Widget build(BuildContext context) { + return Material( + color: Colors.transparent, + child: Ink( + width: setSize(context: context, mobile: 48, tablet: 80), + height: setSize(context: context, mobile: 48, tablet: 80), + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Colors.white.withValues(alpha: 0.3), + Color(0XFF6930DA).withValues(alpha: 0.1), + ], + ), + border: Border.all(color: Colors.white.withValues(alpha: 0.3)), + ), + child: MyInkwell( + onTap: onTap, + audio: audio, + borderRadius: BorderRadius.all(Radius.circular(100)), + child: Padding( + padding: EdgeInsets.all( + setSize(context: context, mobile: MySpaces.s12, tablet: MySpaces.s20) ?? 0, + ), + child: MyImage(image: image), + ), + ), + ), + ); + } +} diff --git a/lib/features/question/presentation/ui/widgets/question_stepper.dart b/lib/features/question/presentation/ui/widgets/question_stepper.dart new file mode 100644 index 0000000..d7408b4 --- /dev/null +++ b/lib/features/question/presentation/ui/widgets/question_stepper.dart @@ -0,0 +1,105 @@ +import 'package:easy_stepper/easy_stepper.dart'; +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; + +class QuestionStepper extends StatelessWidget { + const QuestionStepper({super.key, required this.length ,required this.currentStep}); + + final int length; + final int currentStep; + + @override + Widget build(BuildContext context) { + return SizedBox( + height: 70, + child: EasyStepper( + activeStep: currentStep - 1, + lineStyle: LineStyle( + lineLength: 20, + lineType: LineType.normal, + defaultLineColor: Color(0XFFDFDDF6), + lineThickness: 5, + finishedLineColor: Color(0XFF21B738), + ), + activeStepBackgroundColor: Colors.transparent, + finishedStepBackgroundColor: Colors.transparent, + unreachedStepBackgroundColor: Colors.transparent, + internalPadding: 0, + showLoadingAnimation: false, + stepRadius: 18, + showStepBorder: false, + padding: EdgeInsets.all(0), + enableStepTapping: false, + steps: List.generate( + length, + (index) => EasyStep( + customStep: index == length - 1 + ? MyImage(image: MyAssets.diamond, size: 50) + : ClipPath( + clipper: _StepperClipper(), + child: Container( + height: 32, + width: 32, + padding: EdgeInsets.all(4), + decoration: BoxDecoration( + color: Color(0XFFDFDDF6), + shape: BoxShape.circle, + ), + child: ClipPath( + clipper: _StepperClipper(), + child: Container( + padding: EdgeInsets.all(6), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: index < currentStep - 1 + ? Color(0XFF21B738) + : index == currentStep - 1 + ? Color(0XFF847AC4) + : Colors.transparent, + ), + child: index < currentStep - 1 ? MyImage(image: MyAssets.done) : null, + ), + ), + ), + ), + ), + ), + ), + ); + } +} + +class _StepperClipper extends CustomClipper { + @override + Path getClip(Size size) { + // Original SVG viewBox: width=34, height=33 + final sx = size.width / 34.0; + final sy = size.height / 33.0; + + final p = Path() + ..moveTo(33.3479 * sx, 14.8127 * sy) + ..cubicTo( + 33.3479 * sx, 23.7042 * sy, + 27.2015 * sx, 32.9501 * sy, + 17.8599 * sx, 32.9501 * sy, + )..cubicTo( + 8.51818 * sx, 32.9501 * sy, + 0.945251 * sx, 25.7421 * sy, + 0.945251 * sx, 16.8507 * sy, + )..cubicTo( + 0.945251 * sx, 7.95917 * sy, + 8.51818 * sx, 0.751205 * sy, + 17.8599 * sx, 0.751205 * sy, + )..cubicTo( + 27.2015 * sx, 0.751205 * sy, + 33.3479 * sx, 5.92127 * sy, + 33.3479 * sx, 14.8127 * sy, + )..close(); + + return p; + } + + @override + bool shouldReclip(covariant CustomClipper oldClipper) => false; +} diff --git a/lib/features/question/presentation/ui/widgets/question_title.dart b/lib/features/question/presentation/ui/widgets/question_title.dart new file mode 100644 index 0000000..4d4305e --- /dev/null +++ b/lib/features/question/presentation/ui/widgets/question_title.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; + +class QuestionTitle extends StatelessWidget { + const QuestionTitle({ + super.key, + this.step, + this.currentQuestion, + this.questionLength, + }); + + final int? step; + final int? currentQuestion; + final int? questionLength; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Text( + '${context.translate.step} ${step ?? 0}', + style: MYTextStyle.titr3, + ), + Text( + '${context.translate.question} ${currentQuestion ?? 0}/${(questionLength ?? 0) - 1}', + style: MYTextStyle.matn3.copyWith( + color: MyColors.white.withValues(alpha: 0.5), + shadows: [ + BoxShadow( + color: MyColors.black.withValues(alpha: 0.25), + blurRadius: 0.82, + offset: Offset(0, 1.22), + ), + ], + ), + ), + ], + ); + } +} diff --git a/lib/features/sample/presentation/bloc/sample_bloc.dart b/lib/features/sample/presentation/bloc/sample_bloc.dart index 6b08f2f..00ab5bb 100644 --- a/lib/features/sample/presentation/bloc/sample_bloc.dart +++ b/lib/features/sample/presentation/bloc/sample_bloc.dart @@ -1,4 +1,5 @@ import 'dart:async'; + import 'package:bloc/bloc.dart'; import 'package:hadi_hoda_flutter/core/status/base_status.dart'; import 'package:hadi_hoda_flutter/features/sample/domain/entity/sample_entity.dart'; diff --git a/lib/features/sample/presentation/ui/sample_page.dart b/lib/features/sample/presentation/ui/sample_page.dart index 701a8f6..5378b9f 100644 --- a/lib/features/sample/presentation/ui/sample_page.dart +++ b/lib/features/sample/presentation/ui/sample_page.dart @@ -1,10 +1,17 @@ import 'package:flutter/material.dart'; +import 'package:lottie/lottie.dart'; class SamplePage extends StatelessWidget { const SamplePage({super.key}); @override Widget build(BuildContext context) { - return const Scaffold(); + return Scaffold( + body: Center( + child: Lottie.asset( + 'assets/animations/Celebration.json', + ), + ), + ); } } diff --git a/lib/features/splash/presentation/bloc/splash_bloc.dart b/lib/features/splash/presentation/bloc/splash_bloc.dart new file mode 100644 index 0000000..5fc686b --- /dev/null +++ b/lib/features/splash/presentation/bloc/splash_bloc.dart @@ -0,0 +1,44 @@ +import 'package:bloc/bloc.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; +import 'package:hadi_hoda_flutter/features/splash/presentation/bloc/splash_event.dart'; +import 'package:hadi_hoda_flutter/features/splash/presentation/bloc/splash_state.dart'; + +class SplashBloc extends Bloc { + /// ------------constructor------------ + SplashBloc() : super(const SplashState()); + + /// ------------UseCases------------ + + /// ------------Variables------------ + + /// ------------Controllers------------ + + /// ------------Functions------------ + Future _precacheAllImages(BuildContext context) async { + await Future.wait( + MyAssets.images.map( + (assetPath) => precacheImage(AssetImage(assetPath), context), + ), + ); + } + + Future goToHomePage(BuildContext context) async { + if (context.mounted) { + await _precacheAllImages(context); + } + + await Future.delayed( + Duration(seconds: 2), + () { + if (context.mounted) { + context.goNamed(Routes.homePage); + } + }, + ); + } + + /// ------------Api Calls------------ +} diff --git a/lib/features/splash/presentation/bloc/splash_event.dart b/lib/features/splash/presentation/bloc/splash_event.dart new file mode 100644 index 0000000..196d770 --- /dev/null +++ b/lib/features/splash/presentation/bloc/splash_event.dart @@ -0,0 +1,3 @@ +sealed class SplashEvent { + const SplashEvent(); +} diff --git a/lib/features/splash/presentation/bloc/splash_state.dart b/lib/features/splash/presentation/bloc/splash_state.dart new file mode 100644 index 0000000..2ea42fe --- /dev/null +++ b/lib/features/splash/presentation/bloc/splash_state.dart @@ -0,0 +1,15 @@ +import 'package:hadi_hoda_flutter/core/status/base_status.dart'; + +class SplashState { + final BaseStatus getFilesStatus; + + const SplashState({this.getFilesStatus = const BaseInit()}); + + SplashState copyWith({ + BaseStatus? getFilesStatus, + }) { + return SplashState( + getFilesStatus: getFilesStatus ?? this.getFilesStatus, + ); + } +} diff --git a/lib/features/splash/presentation/ui/splash_page.dart b/lib/features/splash/presentation/ui/splash_page.dart new file mode 100644 index 0000000..7036d27 --- /dev/null +++ b/lib/features/splash/presentation/ui/splash_page.dart @@ -0,0 +1,93 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; +import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; +import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/rotation_anim.dart'; +import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; +import 'package:hadi_hoda_flutter/features/splash/presentation/bloc/splash_bloc.dart'; + +class SplashPage extends StatefulWidget { + const SplashPage({super.key}); + + @override + State createState() => _SplashPageState(); +} + +class _SplashPageState extends State { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().goToHomePage(context); + }); + } + + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + height: context.heightScreen, + width: context.widthScreen, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0XFF00154C), + Color(0XFF150532), + ], + ), + image: DecorationImage( + image: AssetImage(MyAssets.pattern), + scale: 3, + repeat: ImageRepeat.repeat, + colorFilter: ColorFilter.mode( + Colors.white.withValues(alpha: 0.2), + BlendMode.srcIn, + ), + ), + ), + child: Stack( + alignment: Alignment.center, + children: [ + _image(), + _loading(context), + ], + ), + ), + ); + } + + Widget _image() { + return Stack( + children: [ + MyImage( + image: MyAssets.hadiHoda, + ), + PositionedDirectional( + start: MySpaces.s10, + top: MySpaces.s40, + child: MyImage( + image: MyAssets.globe, + ), + ), + ], + ); + } + + + Positioned _loading(BuildContext context) { + return Positioned( + bottom: MySpaces.s40, + child: RotationAnim( + child: MyImage( + image: MyAssets.loading, + size: setSize(context: context, mobile: 70, tablet: 100), + ), + ) + ); + } +} diff --git a/lib/init_bindings.dart b/lib/init_bindings.dart index 7a63fe8..2690c2f 100644 --- a/lib/init_bindings.dart +++ b/lib/init_bindings.dart @@ -1,19 +1,90 @@ +import 'dart:io'; + +import 'package:get_it/get_it.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; import 'package:hadi_hoda_flutter/core/network/http_request.dart'; import 'package:hadi_hoda_flutter/core/network/http_request_impl.dart'; +import 'package:hadi_hoda_flutter/core/services/audio_service.dart'; +import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_bloc.dart'; +import 'package:hadi_hoda_flutter/features/download/data/datasource/download_datasource.dart'; +import 'package:hadi_hoda_flutter/features/download/data/repository_impl/download_repository_impl.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/repository/download_repository.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_audios_usecase.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_images_usecase.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/loading_stream_usecase.dart'; +import 'package:hadi_hoda_flutter/features/download/domain/usecases/save_levels_usecase.dart'; +import 'package:hadi_hoda_flutter/features/level/data/datasource/level_datasource.dart'; +import 'package:hadi_hoda_flutter/features/level/data/repository_impl/level_repository_impl.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/repository/level_repository.dart'; +import 'package:hadi_hoda_flutter/features/level/domain/usecases/get_levels_usecase.dart'; +import 'package:hadi_hoda_flutter/features/question/data/datasource/question_datasource.dart'; +import 'package:hadi_hoda_flutter/features/question/data/repository_impl/question_repository_impl.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/file_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/hadith_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/repository/question_repository.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/usecases/get_level_usecase.dart'; +import 'package:hadi_hoda_flutter/features/question/domain/usecases/get_next_level_usecase.dart'; import 'package:hadi_hoda_flutter/features/sample/data/datasource/sample_datasource.dart'; import 'package:hadi_hoda_flutter/features/sample/data/repository_impl/sample_repository_impl.dart'; import 'package:hadi_hoda_flutter/features/sample/domain/repository/sample_repository.dart'; import 'package:hadi_hoda_flutter/features/sample/domain/usecases/get_sample_usecase.dart'; -import 'package:get_it/get_it.dart'; +import 'package:hive/hive.dart'; +import 'package:path_provider/path_provider.dart'; final GetIt locator = GetIt.I; void initBindings() { /// Classes locator.registerSingleton(HttpRequestImpl()); + locator.registerSingleton( + AudioService(volume: MyConstants.mainAudioVolume), + instanceName: MyConstants.mainAudioService, + ); + locator.registerSingleton( + AudioService(), + instanceName: MyConstants.effectAudioService, + ); + locator.registerSingleton(AppBloc()); /// Sample Feature locator.registerLazySingleton(() => SampleDatasourceImpl(locator())); locator.registerLazySingleton(() => SampleRepositoryImpl(locator())); locator.registerLazySingleton(() => GetSampleUseCase(locator())); + + /// Download Feature + locator.registerLazySingleton(() => DownloadDatasourceImpl(locator())); + locator.registerLazySingleton(() => DownloadRepositoryImpl(locator())); + locator.registerLazySingleton(() => GetImagesUseCase(locator())); + locator.registerLazySingleton(() => GetAudiosUseCase(locator())); + locator.registerLazySingleton(() => SaveLevelsUseCase(locator())); + locator.registerLazySingleton(() => LoadingStreamUseCase(locator())); + + /// Question Feature + locator.registerLazySingleton(() => QuestionDatasourceImpl()); + locator.registerLazySingleton(() => QuestionRepositoryImpl(locator())); + locator.registerLazySingleton(() => GetLevelUseCase(locator())); + locator.registerLazySingleton(() => GetNextLevelUseCase(locator())); + + /// Level Feature + locator.registerLazySingleton(() => LocalLevelDatasourceImpl()); + locator.registerLazySingleton(() => LevelRepositoryImpl(locator())); + locator.registerLazySingleton(() => GetLevelsUseCase(locator())); } + +Future initDataBase() async { + final Directory dir = await getApplicationDocumentsDirectory(); + Hive + ..init(dir.path) + ..registerAdapter(FileEntityAdapter()) + ..registerAdapter(AnswerEntityAdapter()) + ..registerAdapter(QuestionEntityAdapter()) + ..registerAdapter(HadithEntityAdapter()) + ..registerAdapter(LevelEntityAdapter()) + ..registerAdapter(TotalDataEntityAdapter()); + + await Hive.openBox(MyConstants.levelBox); +} \ No newline at end of file diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb new file mode 100644 index 0000000..eac3c2f --- /dev/null +++ b/lib/l10n/app_ar.arb @@ -0,0 +1,39 @@ +{ + "@@locale": "ar", + "about_us": "معلومات عنا", + "about_us_desc": "تجمع Rive بين أداة تصميم تفاعلية، وتنسيق رسومي جديد يعتمد على الحالة، وبيئة تشغيل خفيفة متعددة المنصات، ومحرّك عرض متجهي سريع للغاية.\nتجعل هذه المنظومة المتكاملة الواجهات تنبض بالحياة من خلال الحركة، وتمنح المصممين والمطورين الأدوات اللازمة للابتكار.", + "select_language": "اختر اللغة", + "select": "اختيار", + "please_wait": "يرجى الانتظار قليلاً...", + "downloading_data": "جارٍ تنزيل البيانات الأولية", + "lost_connection": "فُقد الاتصال!", + "retry": "إعادة المحاولة", + "connected_to_internet": "يجب أن تكون متصلاً بالإنترنت لتنزيل بيانات اللعبة الأولية.", + "start": "ابدأ", + "step": "خطوة", + "question": "سؤال", + "be_cureful": "كن أكثر\nحذرًا.", + "wrong_answer": "إجابتك\nكانت غير صحيحة.", + "you_got_diamond": "لقد حصلت على الماسة", + "map": "الخريطة", + "next": "التالي", + "you_win": "لقد فزت!", + "skip": "تخطي", + "intro_1_1": "العشاء جاهز! أسرعوا وتعالوا واغسلوا أيديكم الجميلة!", + "intro_1_2": "أمي! أيدينا ليست متسخة كثيرًا! سنمسحها بمنديل فقط!", + "intro_2": "نقاء الإيمان...\nيعني أن النظافة من علامات الإيمان!", + "intro_3": "هذه الأعمال الطيبة تجعل أرواحنا قوية وجميلة!", + "intro_4": "هل ترغب في السفر إلى الحديقة الموعودة؟", + "intro_5": "نعممم...\nنحن جاهزون!", + "want_to_exit": "هل تريد الخروج؟", + "exit_dialog_desc": "عد مرة أخرى أيها البطل!\nالمغامرة لم تنتهِ بعد!", + "cancel": "إلغاء", + "exit": "خروج", + "play": "العب", + "no_hadith": "لا يوجد حديث لهذا السؤال", + "showcase_answer": "اضغط على الخيار الصحيح\nلتحديده.", + "showcase_notif": "سيقوم الراوي بقراءة\nالإجابات والخيارات لك.", + "showcase_stepper": "هنا سترى الأسئلة الخاصة\nبهذه المرحلة للوصول\nإلى الماسة.", + "showcase_hadith": "اطّلع على المصادر والأحاديث\nلهذا السؤال", + "showcase_guide": "هذا دليل سيساعدك\nفي رحلتك." +} diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index a4e20ac..cdb4691 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -1,3 +1,39 @@ { - "helloWorld": "Hello World" + "@@locale": "en", + "about_us": "About us", + "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", + "select_language": "Select language", + "select": "Select", + "please_wait": "wait a few moments...", + "downloading_data": "Downloading initial data", + "lost_connection": "Lost connection!", + "retry": "Retry", + "connected_to_internet": "You must be connected to the internet to download the initial game data.", + "start": "Start", + "step": "Step", + "question": "Question", + "be_cureful": "Be more\ncareful.", + "wrong_answer": "Your answer\nwas not correct.", + "you_got_diamond": "You got the diamond", + "map": "Map", + "next": "Next", + "you_win": "You Win!", + "skip": "Skip", + "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", + "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", + "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", + "intro_3": "These good deeds make our souls strong and beautiful!", + "intro_4": "Do you want to travel to the Promised Garden?", + "intro_5": "Yessss....\nWe are ready!", + "want_to_exit": "Want To Exit?", + "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", + "cancel": "Cancel", + "exit": "Exit", + "play": "PLAY", + "no_hadith": "There isn't any hadith for this question", + "showcase_answer": "Tap the correct option\nto select.", + "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", + "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", + "showcase_hadith": "View sources and\nhadiths for this\nquestion", + "showcase_guide": "This is a guide that will\nhelp you." } \ No newline at end of file diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb new file mode 100644 index 0000000..8c008a6 --- /dev/null +++ b/lib/l10n/app_fr.arb @@ -0,0 +1,39 @@ +{ + "@@locale": "fr", + "about_us": "À propos de nous", + "about_us_desc": "Rive combine un outil de conception interactif, un nouveau format graphique avec état, un environnement d’exécution multiplateforme léger et un moteur de rendu vectoriel ultra-rapide. \nCette chaîne complète donne vie aux interfaces grâce au mouvement et offre aux concepteurs et développeurs les outils nécessaires pour créer.", + "select_language": "Choisissez la langue", + "select": "Sélectionner", + "please_wait": "Veuillez patienter quelques instants...", + "downloading_data": "Téléchargement des données initiales", + "lost_connection": "Connexion perdue !", + "retry": "Réessayer", + "connected_to_internet": "Vous devez être connecté à Internet pour télécharger les données initiales du jeu.", + "start": "Commencer", + "step": "Étape", + "question": "Question", + "be_cureful": "Sois plus\nprudent.", + "wrong_answer": "Ta réponse\nn’était pas correcte.", + "you_got_diamond": "Tu as obtenu le diamant", + "map": "Carte", + "next": "Suivant", + "you_win": "Tu as gagné !", + "skip": "Passer", + "intro_1_1": "Le dîner est prêt ! Venez vite et lavez vos jolies mains !", + "intro_1_2": "Maman ! Nos mains ne sont pas si sales ! On va juste les essuyer avec un mouchoir !", + "intro_2": "La pureté de la foi...\nCela signifie que la propreté est un signe de foi !", + "intro_3": "Ces bonnes actions rendent notre âme forte et belle !", + "intro_4": "Veux-tu voyager vers le Jardin Promis ?", + "intro_5": "Ouuuiii...\nNous sommes prêts !", + "want_to_exit": "Tu veux quitter ?", + "exit_dialog_desc": "Reviens, héros !\nL’aventure n’est pas encore finie !", + "cancel": "Annuler", + "exit": "Quitter", + "play": "JOUER", + "no_hadith": "Il n’y a aucun hadith pour cette question", + "showcase_answer": "Appuie sur la bonne\noption pour la choisir.", + "showcase_notif": "Le narrateur lira\nles réponses des\noptions pour toi.", + "showcase_stepper": "Ici, tu verras les\nquestions de cette\nétape pour atteindre\nle diamant.", + "showcase_hadith": "Consulte les sources et\nles hadiths pour cette\nquestion", + "showcase_guide": "Ceci est un guide\nqui t’aidera." +} diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 38ec2aa..6b4956f 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -5,7 +5,11 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/intl.dart' as intl; +import 'app_localizations_ar.dart'; import 'app_localizations_en.dart'; +import 'app_localizations_fr.dart'; +import 'app_localizations_ru.dart'; +import 'app_localizations_tr.dart'; // ignore_for_file: type=lint @@ -92,13 +96,229 @@ abstract class AppLocalizations { ]; /// A list of this localizations delegate's supported locales. - static const List supportedLocales = [Locale('en')]; + static const List supportedLocales = [ + Locale('ar'), + Locale('en'), + Locale('fr'), + Locale('ru'), + Locale('tr'), + ]; - /// No description provided for @helloWorld. + /// No description provided for @about_us. /// /// In en, this message translates to: - /// **'Hello World'** - String get helloWorld; + /// **'About us'** + String get about_us; + + /// No description provided for @about_us_desc. + /// + /// In en, this message translates to: + /// **'Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.'** + String get about_us_desc; + + /// No description provided for @select_language. + /// + /// In en, this message translates to: + /// **'Select language'** + String get select_language; + + /// No description provided for @select. + /// + /// In en, this message translates to: + /// **'Select'** + String get select; + + /// No description provided for @please_wait. + /// + /// In en, this message translates to: + /// **'wait a few moments...'** + String get please_wait; + + /// No description provided for @downloading_data. + /// + /// In en, this message translates to: + /// **'Downloading initial data'** + String get downloading_data; + + /// No description provided for @lost_connection. + /// + /// In en, this message translates to: + /// **'Lost connection!'** + String get lost_connection; + + /// No description provided for @retry. + /// + /// In en, this message translates to: + /// **'Retry'** + String get retry; + + /// No description provided for @connected_to_internet. + /// + /// In en, this message translates to: + /// **'You must be connected to the internet to download the initial game data.'** + String get connected_to_internet; + + /// No description provided for @start. + /// + /// In en, this message translates to: + /// **'Start'** + String get start; + + /// No description provided for @step. + /// + /// In en, this message translates to: + /// **'Step'** + String get step; + + /// No description provided for @question. + /// + /// In en, this message translates to: + /// **'Question'** + String get question; + + /// No description provided for @be_cureful. + /// + /// In en, this message translates to: + /// **'Be more\ncareful.'** + String get be_cureful; + + /// No description provided for @wrong_answer. + /// + /// In en, this message translates to: + /// **'Your answer\nwas not correct.'** + String get wrong_answer; + + /// No description provided for @you_got_diamond. + /// + /// In en, this message translates to: + /// **'You got the diamond'** + String get you_got_diamond; + + /// No description provided for @map. + /// + /// In en, this message translates to: + /// **'Map'** + String get map; + + /// No description provided for @next. + /// + /// In en, this message translates to: + /// **'Next'** + String get next; + + /// No description provided for @you_win. + /// + /// In en, this message translates to: + /// **'You Win!'** + String get you_win; + + /// No description provided for @skip. + /// + /// In en, this message translates to: + /// **'Skip'** + String get skip; + + /// No description provided for @intro_1_1. + /// + /// In en, this message translates to: + /// **'Dinner is ready! Come quickly and wash your beautiful hands!'** + String get intro_1_1; + + /// No description provided for @intro_1_2. + /// + /// In en, this message translates to: + /// **'Mom! Our hands aren\'t that dirty! We\'ll just wipe them with a tissue!'** + String get intro_1_2; + + /// No description provided for @intro_2. + /// + /// In en, this message translates to: + /// **'The purity of faith... \nIt means cleanliness is a sign of faith!'** + String get intro_2; + + /// No description provided for @intro_3. + /// + /// In en, this message translates to: + /// **'These good deeds make our souls strong and beautiful!'** + String get intro_3; + + /// No description provided for @intro_4. + /// + /// In en, this message translates to: + /// **'Do you want to travel to the Promised Garden?'** + String get intro_4; + + /// No description provided for @intro_5. + /// + /// In en, this message translates to: + /// **'Yessss....\nWe are ready!'** + String get intro_5; + + /// No description provided for @want_to_exit. + /// + /// In en, this message translates to: + /// **'Want To Exit?'** + String get want_to_exit; + + /// No description provided for @exit_dialog_desc. + /// + /// In en, this message translates to: + /// **'Come back, hero!\nThe adventure isn’t over yet'** + String get exit_dialog_desc; + + /// No description provided for @cancel. + /// + /// In en, this message translates to: + /// **'Cancel'** + String get cancel; + + /// No description provided for @exit. + /// + /// In en, this message translates to: + /// **'Exit'** + String get exit; + + /// No description provided for @play. + /// + /// In en, this message translates to: + /// **'PLAY'** + String get play; + + /// No description provided for @no_hadith. + /// + /// In en, this message translates to: + /// **'There isn\'t any hadith for this question'** + String get no_hadith; + + /// No description provided for @showcase_answer. + /// + /// In en, this message translates to: + /// **'Tap the correct option\nto select.'** + String get showcase_answer; + + /// No description provided for @showcase_notif. + /// + /// In en, this message translates to: + /// **'The announcer will\nread the answers to\nthe options to you.'** + String get showcase_notif; + + /// No description provided for @showcase_stepper. + /// + /// In en, this message translates to: + /// **'Here you will see the\nquestions for this\nstage to reach the\ndiamond.'** + String get showcase_stepper; + + /// No description provided for @showcase_hadith. + /// + /// In en, this message translates to: + /// **'View sources and\nhadiths for this\nquestion'** + String get showcase_hadith; + + /// No description provided for @showcase_guide. + /// + /// In en, this message translates to: + /// **'This is a guide that will\nhelp you.'** + String get showcase_guide; } class _AppLocalizationsDelegate @@ -112,7 +332,7 @@ class _AppLocalizationsDelegate @override bool isSupported(Locale locale) => - ['en'].contains(locale.languageCode); + ['ar', 'en', 'fr', 'ru', 'tr'].contains(locale.languageCode); @override bool shouldReload(_AppLocalizationsDelegate old) => false; @@ -121,8 +341,16 @@ class _AppLocalizationsDelegate AppLocalizations lookupAppLocalizations(Locale locale) { // Lookup logic when only language code is specified. switch (locale.languageCode) { + case 'ar': + return AppLocalizationsAr(); case 'en': return AppLocalizationsEn(); + case 'fr': + return AppLocalizationsFr(); + case 'ru': + return AppLocalizationsRu(); + case 'tr': + return AppLocalizationsTr(); } throw FlutterError( diff --git a/lib/l10n/app_localizations_ar.dart b/lib/l10n/app_localizations_ar.dart new file mode 100644 index 0000000..fdbe46b --- /dev/null +++ b/lib/l10n/app_localizations_ar.dart @@ -0,0 +1,122 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Arabic (`ar`). +class AppLocalizationsAr extends AppLocalizations { + AppLocalizationsAr([String locale = 'ar']) : super(locale); + + @override + String get about_us => 'معلومات عنا'; + + @override + String get about_us_desc => + 'تجمع Rive بين أداة تصميم تفاعلية، وتنسيق رسومي جديد يعتمد على الحالة، وبيئة تشغيل خفيفة متعددة المنصات، ومحرّك عرض متجهي سريع للغاية.\nتجعل هذه المنظومة المتكاملة الواجهات تنبض بالحياة من خلال الحركة، وتمنح المصممين والمطورين الأدوات اللازمة للابتكار.'; + + @override + String get select_language => 'اختر اللغة'; + + @override + String get select => 'اختيار'; + + @override + String get please_wait => 'يرجى الانتظار قليلاً...'; + + @override + String get downloading_data => 'جارٍ تنزيل البيانات الأولية'; + + @override + String get lost_connection => 'فُقد الاتصال!'; + + @override + String get retry => 'إعادة المحاولة'; + + @override + String get connected_to_internet => + 'يجب أن تكون متصلاً بالإنترنت لتنزيل بيانات اللعبة الأولية.'; + + @override + String get start => 'ابدأ'; + + @override + String get step => 'خطوة'; + + @override + String get question => 'سؤال'; + + @override + String get be_cureful => 'كن أكثر\nحذرًا.'; + + @override + String get wrong_answer => 'إجابتك\nكانت غير صحيحة.'; + + @override + String get you_got_diamond => 'لقد حصلت على الماسة'; + + @override + String get map => 'الخريطة'; + + @override + String get next => 'التالي'; + + @override + String get you_win => 'لقد فزت!'; + + @override + String get skip => 'تخطي'; + + @override + String get intro_1_1 => 'العشاء جاهز! أسرعوا وتعالوا واغسلوا أيديكم الجميلة!'; + + @override + String get intro_1_2 => 'أمي! أيدينا ليست متسخة كثيرًا! سنمسحها بمنديل فقط!'; + + @override + String get intro_2 => 'نقاء الإيمان...\nيعني أن النظافة من علامات الإيمان!'; + + @override + String get intro_3 => 'هذه الأعمال الطيبة تجعل أرواحنا قوية وجميلة!'; + + @override + String get intro_4 => 'هل ترغب في السفر إلى الحديقة الموعودة؟'; + + @override + String get intro_5 => 'نعممم...\nنحن جاهزون!'; + + @override + String get want_to_exit => 'هل تريد الخروج؟'; + + @override + String get exit_dialog_desc => + 'عد مرة أخرى أيها البطل!\nالمغامرة لم تنتهِ بعد!'; + + @override + String get cancel => 'إلغاء'; + + @override + String get exit => 'خروج'; + + @override + String get play => 'العب'; + + @override + String get no_hadith => 'لا يوجد حديث لهذا السؤال'; + + @override + String get showcase_answer => 'اضغط على الخيار الصحيح\nلتحديده.'; + + @override + String get showcase_notif => 'سيقوم الراوي بقراءة\nالإجابات والخيارات لك.'; + + @override + String get showcase_stepper => + 'هنا سترى الأسئلة الخاصة\nبهذه المرحلة للوصول\nإلى الماسة.'; + + @override + String get showcase_hadith => 'اطّلع على المصادر والأحاديث\nلهذا السؤال'; + + @override + String get showcase_guide => 'هذا دليل سيساعدك\nفي رحلتك.'; +} diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 7d35d65..baf9d51 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -9,5 +9,118 @@ class AppLocalizationsEn extends AppLocalizations { AppLocalizationsEn([String locale = 'en']) : super(locale); @override - String get helloWorld => 'Hello World'; + String get about_us => 'About us'; + + @override + String get about_us_desc => + 'Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.'; + + @override + String get select_language => 'Select language'; + + @override + String get select => 'Select'; + + @override + String get please_wait => 'wait a few moments...'; + + @override + String get downloading_data => 'Downloading initial data'; + + @override + String get lost_connection => 'Lost connection!'; + + @override + String get retry => 'Retry'; + + @override + String get connected_to_internet => + 'You must be connected to the internet to download the initial game data.'; + + @override + String get start => 'Start'; + + @override + String get step => 'Step'; + + @override + String get question => 'Question'; + + @override + String get be_cureful => 'Be more\ncareful.'; + + @override + String get wrong_answer => 'Your answer\nwas not correct.'; + + @override + String get you_got_diamond => 'You got the diamond'; + + @override + String get map => 'Map'; + + @override + String get next => 'Next'; + + @override + String get you_win => 'You Win!'; + + @override + String get skip => 'Skip'; + + @override + String get intro_1_1 => + 'Dinner is ready! Come quickly and wash your beautiful hands!'; + + @override + String get intro_1_2 => + 'Mom! Our hands aren\'t that dirty! We\'ll just wipe them with a tissue!'; + + @override + String get intro_2 => + 'The purity of faith... \nIt means cleanliness is a sign of faith!'; + + @override + String get intro_3 => 'These good deeds make our souls strong and beautiful!'; + + @override + String get intro_4 => 'Do you want to travel to the Promised Garden?'; + + @override + String get intro_5 => 'Yessss....\nWe are ready!'; + + @override + String get want_to_exit => 'Want To Exit?'; + + @override + String get exit_dialog_desc => + 'Come back, hero!\nThe adventure isn’t over yet'; + + @override + String get cancel => 'Cancel'; + + @override + String get exit => 'Exit'; + + @override + String get play => 'PLAY'; + + @override + String get no_hadith => 'There isn\'t any hadith for this question'; + + @override + String get showcase_answer => 'Tap the correct option\nto select.'; + + @override + String get showcase_notif => + 'The announcer will\nread the answers to\nthe options to you.'; + + @override + String get showcase_stepper => + 'Here you will see the\nquestions for this\nstage to reach the\ndiamond.'; + + @override + String get showcase_hadith => 'View sources and\nhadiths for this\nquestion'; + + @override + String get showcase_guide => 'This is a guide that will\nhelp you.'; } diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart new file mode 100644 index 0000000..f870a7e --- /dev/null +++ b/lib/l10n/app_localizations_fr.dart @@ -0,0 +1,127 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for French (`fr`). +class AppLocalizationsFr extends AppLocalizations { + AppLocalizationsFr([String locale = 'fr']) : super(locale); + + @override + String get about_us => 'À propos de nous'; + + @override + String get about_us_desc => + 'Rive combine un outil de conception interactif, un nouveau format graphique avec état, un environnement d’exécution multiplateforme léger et un moteur de rendu vectoriel ultra-rapide. \nCette chaîne complète donne vie aux interfaces grâce au mouvement et offre aux concepteurs et développeurs les outils nécessaires pour créer.'; + + @override + String get select_language => 'Choisissez la langue'; + + @override + String get select => 'Sélectionner'; + + @override + String get please_wait => 'Veuillez patienter quelques instants...'; + + @override + String get downloading_data => 'Téléchargement des données initiales'; + + @override + String get lost_connection => 'Connexion perdue !'; + + @override + String get retry => 'Réessayer'; + + @override + String get connected_to_internet => + 'Vous devez être connecté à Internet pour télécharger les données initiales du jeu.'; + + @override + String get start => 'Commencer'; + + @override + String get step => 'Étape'; + + @override + String get question => 'Question'; + + @override + String get be_cureful => 'Sois plus\nprudent.'; + + @override + String get wrong_answer => 'Ta réponse\nn’était pas correcte.'; + + @override + String get you_got_diamond => 'Tu as obtenu le diamant'; + + @override + String get map => 'Carte'; + + @override + String get next => 'Suivant'; + + @override + String get you_win => 'Tu as gagné !'; + + @override + String get skip => 'Passer'; + + @override + String get intro_1_1 => + 'Le dîner est prêt ! Venez vite et lavez vos jolies mains !'; + + @override + String get intro_1_2 => + 'Maman ! Nos mains ne sont pas si sales ! On va juste les essuyer avec un mouchoir !'; + + @override + String get intro_2 => + 'La pureté de la foi...\nCela signifie que la propreté est un signe de foi !'; + + @override + String get intro_3 => 'Ces bonnes actions rendent notre âme forte et belle !'; + + @override + String get intro_4 => 'Veux-tu voyager vers le Jardin Promis ?'; + + @override + String get intro_5 => 'Ouuuiii...\nNous sommes prêts !'; + + @override + String get want_to_exit => 'Tu veux quitter ?'; + + @override + String get exit_dialog_desc => + 'Reviens, héros !\nL’aventure n’est pas encore finie !'; + + @override + String get cancel => 'Annuler'; + + @override + String get exit => 'Quitter'; + + @override + String get play => 'JOUER'; + + @override + String get no_hadith => 'Il n’y a aucun hadith pour cette question'; + + @override + String get showcase_answer => 'Appuie sur la bonne\noption pour la choisir.'; + + @override + String get showcase_notif => + 'Le narrateur lira\nles réponses des\noptions pour toi.'; + + @override + String get showcase_stepper => + 'Ici, tu verras les\nquestions de cette\nétape pour atteindre\nle diamant.'; + + @override + String get showcase_hadith => + 'Consulte les sources et\nles hadiths pour cette\nquestion'; + + @override + String get showcase_guide => 'Ceci est un guide\nqui t’aidera.'; +} diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart new file mode 100644 index 0000000..dbd16a8 --- /dev/null +++ b/lib/l10n/app_localizations_ru.dart @@ -0,0 +1,127 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Russian (`ru`). +class AppLocalizationsRu extends AppLocalizations { + AppLocalizationsRu([String locale = 'ru']) : super(locale); + + @override + String get about_us => 'О нас'; + + @override + String get about_us_desc => + 'Rive объединяет интерактивный инструмент для дизайна, новый формат графики с состоянием, легковесную многоплатформенную среду выполнения и сверхбыстрый векторный рендер. \nЭта сквозная система оживляет интерфейсы с помощью анимации и дает дизайнерам и разработчикам необходимые инструменты для создания.'; + + @override + String get select_language => 'Выберите язык'; + + @override + String get select => 'Выбрать'; + + @override + String get please_wait => 'Подождите несколько секунд...'; + + @override + String get downloading_data => 'Загрузка исходных данных'; + + @override + String get lost_connection => 'Соединение потеряно!'; + + @override + String get retry => 'Повторить'; + + @override + String get connected_to_internet => + 'Для загрузки исходных данных игры необходимо подключение к интернету.'; + + @override + String get start => 'Начать'; + + @override + String get step => 'Шаг'; + + @override + String get question => 'Вопрос'; + + @override + String get be_cureful => 'Будь\nвнимательнее.'; + + @override + String get wrong_answer => 'Твой ответ\nневерен.'; + + @override + String get you_got_diamond => 'Ты получил алмаз'; + + @override + String get map => 'Карта'; + + @override + String get next => 'Далее'; + + @override + String get you_win => 'Ты победил!'; + + @override + String get skip => 'Пропустить'; + + @override + String get intro_1_1 => + 'Ужин готов! Скорее приходите и помойте свои красивые руки!'; + + @override + String get intro_1_2 => + 'Мама! Наши руки не такие грязные! Мы просто вытрем их салфеткой!'; + + @override + String get intro_2 => + 'Чистота веры...\nОна означает, что чистота — это признак веры!'; + + @override + String get intro_3 => + 'Эти добрые дела делают нашу душу сильной и прекрасной!'; + + @override + String get intro_4 => 'Хочешь отправиться в Обетованный Сад?'; + + @override + String get intro_5 => 'Дааа...\nМы готовы!'; + + @override + String get want_to_exit => 'Хочешь выйти?'; + + @override + String get exit_dialog_desc => + 'Возвращайся, герой!\nПриключение еще не закончено!'; + + @override + String get cancel => 'Отмена'; + + @override + String get exit => 'Выход'; + + @override + String get play => 'ИГРАТЬ'; + + @override + String get no_hadith => 'Для этого вопроса нет хадиса'; + + @override + String get showcase_answer => 'Нажми на правильный\nвариант, чтобы выбрать.'; + + @override + String get showcase_notif => 'Диктор прочитает\nтебе все варианты\nответов.'; + + @override + String get showcase_stepper => + 'Здесь ты увидишь\nвопросы этого этапа,\nчтобы получить\nалмаз.'; + + @override + String get showcase_hadith => + 'Просмотри источники и\nхадисы по этому вопросу'; + + @override + String get showcase_guide => 'Это руководство,\nкоторое поможет тебе.'; +} diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart new file mode 100644 index 0000000..0ae805a --- /dev/null +++ b/lib/l10n/app_localizations_tr.dart @@ -0,0 +1,126 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Turkish (`tr`). +class AppLocalizationsTr extends AppLocalizations { + AppLocalizationsTr([String locale = 'tr']) : super(locale); + + @override + String get about_us => 'Hakkımızda'; + + @override + String get about_us_desc => + 'Rive, etkileşimli bir tasarım aracı, yeni bir durumsal grafik formatı, hafif çok platformlu bir çalışma zamanı ve son derece hızlı bir vektör oluşturucu sunar.\nBu uçtan uca süreç, arayüzleri hareketle canlandırır. Tasarımcılara ve geliştiricilere inşa etme gücü verir.'; + + @override + String get select_language => 'Dili seçin'; + + @override + String get select => 'Seç'; + + @override + String get please_wait => 'Lütfen birkaç saniye bekleyin...'; + + @override + String get downloading_data => 'Başlangıç verileri indiriliyor'; + + @override + String get lost_connection => 'Bağlantı kesildi!'; + + @override + String get retry => 'Yeniden dene'; + + @override + String get connected_to_internet => + 'Başlangıç oyun verilerini indirmek için internete bağlı olmalısınız.'; + + @override + String get start => 'Başla'; + + @override + String get step => 'Adım'; + + @override + String get question => 'Soru'; + + @override + String get be_cureful => 'Daha dikkatli\nol.'; + + @override + String get wrong_answer => 'Cevabın\nyanlıştı.'; + + @override + String get you_got_diamond => 'Elması kazandın'; + + @override + String get map => 'Harita'; + + @override + String get next => 'Sonraki'; + + @override + String get you_win => 'Kazandın!'; + + @override + String get skip => 'Geç'; + + @override + String get intro_1_1 => + 'Yemek hazır! Hadi hemen gelin ve güzel ellerinizi yıkayın!'; + + @override + String get intro_1_2 => + 'Anne! Ellerimiz o kadar kirli değil! Peçeteyle sileriz!'; + + @override + String get intro_2 => + 'İman saflığı...\nTemizliğin imanın bir parçası olduğunu gösterir!'; + + @override + String get intro_3 => 'Bu güzel davranışlar ruhumuzu güçlü ve güzel yapar!'; + + @override + String get intro_4 => 'Vadedilen Bahçe\'ye yolculuk etmek ister misin?'; + + @override + String get intro_5 => 'Eveeeet...\nHazırız!'; + + @override + String get want_to_exit => 'Çıkmak istiyor musun?'; + + @override + String get exit_dialog_desc => 'Geri dön, kahraman!\nMacera henüz bitmedi!'; + + @override + String get cancel => 'İptal'; + + @override + String get exit => 'Çıkış'; + + @override + String get play => 'OYNAT'; + + @override + String get no_hadith => 'Bu soru için hadis bulunamadı'; + + @override + String get showcase_answer => 'Doğru seçeneğe\ndokunarak seç.'; + + @override + String get showcase_notif => + 'Anlatıcı, seçeneklerin\ncevaplarını sana\nokuyacak.'; + + @override + String get showcase_stepper => + 'Burada, elmasa ulaşmak\niçin bu aşamadaki\nsoruları göreceksin.'; + + @override + String get showcase_hadith => + 'Bu soruya ait\nkaynakları ve hadisleri\nincele'; + + @override + String get showcase_guide => 'Bu, sana yardımcı olacak\nbir rehberdir.'; +} diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb new file mode 100644 index 0000000..c457456 --- /dev/null +++ b/lib/l10n/app_ru.arb @@ -0,0 +1,39 @@ +{ + "@@locale": "ru", + "about_us": "О нас", + "about_us_desc": "Rive объединяет интерактивный инструмент для дизайна, новый формат графики с состоянием, легковесную многоплатформенную среду выполнения и сверхбыстрый векторный рендер. \nЭта сквозная система оживляет интерфейсы с помощью анимации и дает дизайнерам и разработчикам необходимые инструменты для создания.", + "select_language": "Выберите язык", + "select": "Выбрать", + "please_wait": "Подождите несколько секунд...", + "downloading_data": "Загрузка исходных данных", + "lost_connection": "Соединение потеряно!", + "retry": "Повторить", + "connected_to_internet": "Для загрузки исходных данных игры необходимо подключение к интернету.", + "start": "Начать", + "step": "Шаг", + "question": "Вопрос", + "be_cureful": "Будь\nвнимательнее.", + "wrong_answer": "Твой ответ\nневерен.", + "you_got_diamond": "Ты получил алмаз", + "map": "Карта", + "next": "Далее", + "you_win": "Ты победил!", + "skip": "Пропустить", + "intro_1_1": "Ужин готов! Скорее приходите и помойте свои красивые руки!", + "intro_1_2": "Мама! Наши руки не такие грязные! Мы просто вытрем их салфеткой!", + "intro_2": "Чистота веры...\nОна означает, что чистота — это признак веры!", + "intro_3": "Эти добрые дела делают нашу душу сильной и прекрасной!", + "intro_4": "Хочешь отправиться в Обетованный Сад?", + "intro_5": "Дааа...\nМы готовы!", + "want_to_exit": "Хочешь выйти?", + "exit_dialog_desc": "Возвращайся, герой!\nПриключение еще не закончено!", + "cancel": "Отмена", + "exit": "Выход", + "play": "ИГРАТЬ", + "no_hadith": "Для этого вопроса нет хадиса", + "showcase_answer": "Нажми на правильный\nвариант, чтобы выбрать.", + "showcase_notif": "Диктор прочитает\nтебе все варианты\nответов.", + "showcase_stepper": "Здесь ты увидишь\nвопросы этого этапа,\nчтобы получить\nалмаз.", + "showcase_hadith": "Просмотри источники и\nхадисы по этому вопросу", + "showcase_guide": "Это руководство,\nкоторое поможет тебе." +} diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb new file mode 100644 index 0000000..e8b78c8 --- /dev/null +++ b/lib/l10n/app_tr.arb @@ -0,0 +1,39 @@ +{ + "@@locale": "tr", + "about_us": "Hakkımızda", + "about_us_desc": "Rive, etkileşimli bir tasarım aracı, yeni bir durumsal grafik formatı, hafif çok platformlu bir çalışma zamanı ve son derece hızlı bir vektör oluşturucu sunar.\nBu uçtan uca süreç, arayüzleri hareketle canlandırır. Tasarımcılara ve geliştiricilere inşa etme gücü verir.", + "select_language": "Dili seçin", + "select": "Seç", + "please_wait": "Lütfen birkaç saniye bekleyin...", + "downloading_data": "Başlangıç verileri indiriliyor", + "lost_connection": "Bağlantı kesildi!", + "retry": "Yeniden dene", + "connected_to_internet": "Başlangıç oyun verilerini indirmek için internete bağlı olmalısınız.", + "start": "Başla", + "step": "Adım", + "question": "Soru", + "be_cureful": "Daha dikkatli\nol.", + "wrong_answer": "Cevabın\nyanlıştı.", + "you_got_diamond": "Elması kazandın", + "map": "Harita", + "next": "Sonraki", + "you_win": "Kazandın!", + "skip": "Geç", + "intro_1_1": "Yemek hazır! Hadi hemen gelin ve güzel ellerinizi yıkayın!", + "intro_1_2": "Anne! Ellerimiz o kadar kirli değil! Peçeteyle sileriz!", + "intro_2": "İman saflığı...\nTemizliğin imanın bir parçası olduğunu gösterir!", + "intro_3": "Bu güzel davranışlar ruhumuzu güçlü ve güzel yapar!", + "intro_4": "Vadedilen Bahçe'ye yolculuk etmek ister misin?", + "intro_5": "Eveeeet...\nHazırız!", + "want_to_exit": "Çıkmak istiyor musun?", + "exit_dialog_desc": "Geri dön, kahraman!\nMacera henüz bitmedi!", + "cancel": "İptal", + "exit": "Çıkış", + "play": "OYNAT", + "no_hadith": "Bu soru için hadis bulunamadı", + "showcase_answer": "Doğru seçeneğe\ndokunarak seç.", + "showcase_notif": "Anlatıcı, seçeneklerin\ncevaplarını sana\nokuyacak.", + "showcase_stepper": "Burada, elmasa ulaşmak\niçin bu aşamadaki\nsoruları göreceksin.", + "showcase_hadith": "Bu soruya ait\nkaynakları ve hadisleri\nincele", + "showcase_guide": "Bu, sana yardımcı olacak\nbir rehberdir." +} diff --git a/lib/main.dart b/lib/main.dart index 613e7c8..b9bd653 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,21 +1,30 @@ -import 'package:hadi_hoda_flutter/common_ui/theme/theme_service.dart'; -import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; -import 'package:hadi_hoda_flutter/l10n/app_localizations.dart'; -import 'package:hadi_hoda_flutter/init_bindings.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:hadi_hoda_flutter/common_ui/theme/my_theme.dart'; -import 'package:hadi_hoda_flutter/core/auth_storage/auth_storage.dart'; +import 'package:hadi_hoda_flutter/common_ui/theme/theme_service.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; -import 'package:hadi_hoda_flutter/core/utils/my_scroll_behavior.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_device.dart'; +import 'package:hadi_hoda_flutter/core/utils/storage_path.dart'; +import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_bloc.dart'; +import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_event.dart'; +import 'package:hadi_hoda_flutter/init_bindings.dart'; +import 'package:hadi_hoda_flutter/l10n/app_localizations.dart'; + +import 'features/app/presentation/bloc/app_state.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); initBindings(); await Future.wait([ LocalStorage.init(), + StoragePath.getDocumentDir(), + initDataBase(), + MyDevice.setPortrait(), + MyDevice.setImmersiveSticky(), ]); - AuthStorage.loadData(); runApp(const MainApp()); } @@ -24,20 +33,26 @@ class MainApp extends StatelessWidget { @override Widget build(BuildContext context) { - return MaterialApp.router( - theme: MyTheme.light, - darkTheme: MyTheme.dark, - themeMode: ThemeService.getTheme(), - locale: const Locale('en', 'US'), - supportedLocales: const [Locale('en', 'US')], - scrollBehavior: MyScrollBehavior(), - routerConfig: appPages, - localizationsDelegates: const [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], + return BlocProvider( + create: (context) => locator()..add(InitLocaleEvent()), + child: BlocBuilder( + builder: (context, state) => MaterialApp.router( + theme: MyTheme.light, + darkTheme: MyTheme.dark, + themeMode: ThemeService.getTheme(), + locale: state.locale, + supportedLocales: MyConstants.languages.map( + (e) => e.locale ?? Locale('en', 'US'), + ), + routerConfig: appPages, + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + ), + ), ); } } diff --git a/pubspec.lock b/pubspec.lock index 008a414..3609dd0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,38 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + archive: + dependency: transitive + description: + name: archive + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + url: "https://pub.dev" + source: hosted + version: "4.0.7" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" async: dependency: transitive description: @@ -9,14 +41,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.13.0" + audio_session: + dependency: transitive + description: + name: audio_session + sha256: "8f96a7fecbb718cb093070f868b4cdcb8a9b1053dce342ff8ab2fde10eb9afb7" + url: "https://pub.dev" + source: hosted + version: "0.2.2" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" + url: "https://pub.dev" + source: hosted + version: "3.0.0" bloc: dependency: "direct main" description: name: bloc - sha256: "52c10575f4445c61dd9e0cafcc6356fdd827c4c64dd7945ef3c4105f6b6ac189" + sha256: e18b8e7825e9921d67a6d256dba0b6015ece8a577eb0a411845c46a352994d78 url: "https://pub.dev" source: hosted - version: "9.0.0" + version: "9.0.1" boolean_selector: dependency: transitive description: @@ -25,6 +73,70 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa" + url: "https://pub.dev" + source: hosted + version: "4.0.4" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" + url: "https://pub.dev" + source: hosted + version: "2.4.13" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 + url: "https://pub.dev" + source: hosted + version: "7.3.2" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d + url: "https://pub.dev" + source: hosted + version: "8.12.0" characters: dependency: transitive description: @@ -33,6 +145,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.dev" + source: hosted + version: "2.0.4" clock: dependency: transitive description: @@ -41,6 +161,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.2" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243" + url: "https://pub.dev" + source: hosted + version: "4.11.0" collection: dependency: transitive description: @@ -49,6 +177,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.1" + confetti: + dependency: "direct main" + description: + name: confetti + sha256: "79376a99648efbc3f23582f5784ced0fe239922bd1a0fb41f582051eba750751" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" dio: dependency: "direct main" description: @@ -65,6 +225,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + easy_stepper: + dependency: "direct main" + description: + name: easy_stepper + sha256: "63f66314a509ec690c8152a41288961fd96ba9e92ef184299f068a5e78bd16ad" + url: "https://pub.dev" + source: hosted + version: "0.8.5+1" equatable: dependency: "direct main" description: @@ -97,11 +265,27 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" + flutter_archive: + dependency: "direct main" + description: + name: flutter_archive + sha256: "5ca235f304c12bf468979235f400f79846d204169d715939e39197106f5fc970" + url: "https://pub.dev" + source: hosted + version: "6.0.3" flutter_bloc: dependency: "direct main" description: @@ -133,6 +317,14 @@ packages: description: flutter source: sdk version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" get_it: dependency: "direct main" description: @@ -141,6 +333,14 @@ packages: url: "https://pub.dev" source: hosted version: "8.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de + url: "https://pub.dev" + source: hosted + version: "2.1.3" go_router: dependency: "direct main" description: @@ -149,6 +349,46 @@ packages: url: "https://pub.dev" source: hosted version: "16.2.4" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + hive: + dependency: "direct main" + description: + name: hive + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + hive_generator: + dependency: "direct dev" + description: + name: hive_generator + sha256: "06cb8f58ace74de61f63500564931f9505368f45f98958bd7a6c35ba24159db4" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + http: + dependency: transitive + description: + name: http + sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 + url: "https://pub.dev" + source: hosted + version: "1.5.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://pub.dev" + source: hosted + version: "3.2.2" http_parser: dependency: transitive description: @@ -165,6 +405,54 @@ packages: url: "https://pub.dev" source: hosted version: "0.20.2" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.dev" + source: hosted + version: "1.0.5" + js: + dependency: transitive + description: + name: js + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + url: "https://pub.dev" + source: hosted + version: "0.7.2" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + just_audio: + dependency: "direct main" + description: + name: just_audio + sha256: "9694e4734f515f2a052493d1d7e0d6de219ee0427c7c29492e246ff32a219908" + url: "https://pub.dev" + source: hosted + version: "0.10.5" + just_audio_platform_interface: + dependency: transitive + description: + name: just_audio_platform_interface + sha256: "2532c8d6702528824445921c5ff10548b518b13f808c2e34c2fd54793b999a6a" + url: "https://pub.dev" + source: hosted + version: "4.6.0" + just_audio_web: + dependency: transitive + description: + name: just_audio_web + sha256: "6ba8a2a7e87d57d32f0f7b42856ade3d6a9fbe0f1a11fabae0a4f00bb73f0663" + url: "https://pub.dev" + source: hosted + version: "0.4.16" leak_tracker: dependency: transitive description: @@ -205,6 +493,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + lottie: + dependency: "direct main" + description: + name: lottie + sha256: "8ae0be46dbd9e19641791dc12ee480d34e1fd3f84c749adc05f3ad9342b71b95" + url: "https://pub.dev" + source: hosted + version: "3.3.2" matcher: dependency: transitive description: @@ -245,6 +541,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://pub.dev" + source: hosted + version: "2.2.0" path: dependency: transitive description: @@ -253,6 +557,46 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + path_drawing: + dependency: "direct main" + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db" + url: "https://pub.dev" + source: hosted + version: "2.2.18" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd" + url: "https://pub.dev" + source: hosted + version: "2.4.2" path_provider_linux: dependency: transitive description: @@ -277,6 +621,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" + url: "https://pub.dev" + source: hosted + version: "7.0.1" platform: dependency: transitive description: @@ -293,6 +645,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" + url: "https://pub.dev" + source: hosted + version: "1.5.2" + posix: + dependency: transitive + description: + name: posix + sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" + url: "https://pub.dev" + source: hosted + version: "6.0.3" pretty_dio_logger: dependency: "direct main" description: @@ -309,6 +677,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.5+1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" shared_preferences: dependency: "direct main" description: @@ -365,11 +757,51 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.dev" + source: hosted + version: "1.4.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + showcaseview: + dependency: "direct main" + description: + name: showcaseview + sha256: "59e5edf33cbe3afb56edcbf25de553211409a576cbbbdda226c574410a314a71" + url: "https://pub.dev" + source: hosted + version: "5.0.1" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.0" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c" + url: "https://pub.dev" + source: hosted + version: "1.3.5" source_span: dependency: transitive description: @@ -378,6 +810,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.1" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" stack_trace: dependency: transitive description: @@ -394,6 +834,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 + url: "https://pub.dev" + source: hosted + version: "2.1.1" string_scanner: dependency: transitive description: @@ -402,6 +850,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 + url: "https://pub.dev" + source: hosted + version: "3.4.0" term_glyph: dependency: transitive description: @@ -418,6 +874,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.6" + timing: + dependency: transitive + description: + name: timing + sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" + url: "https://pub.dev" + source: hosted + version: "1.0.2" typed_data: dependency: transitive description: @@ -426,6 +890,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + uuid: + dependency: transitive + description: + name: uuid + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + url: "https://pub.dev" + source: hosted + version: "4.5.1" + vector_graphics: + dependency: "direct main" + description: + name: vector_graphics + sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 + url: "https://pub.dev" + source: hosted + version: "1.1.19" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: "direct dev" + description: + name: vector_graphics_compiler + sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc + url: "https://pub.dev" + source: hosted + version: "1.1.19" vector_math: dependency: transitive description: @@ -442,6 +938,14 @@ packages: url: "https://pub.dev" source: hosted version: "15.0.2" + watcher: + dependency: transitive + description: + name: watcher + sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c" + url: "https://pub.dev" + source: hosted + version: "1.1.3" web: dependency: transitive description: @@ -450,6 +954,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.dev" + source: hosted + version: "3.0.3" xdg_directories: dependency: transitive description: @@ -458,6 +978,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + url: "https://pub.dev" + source: hosted + version: "6.6.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" sdks: dart: ">=3.9.2 <4.0.0" - flutter: ">=3.29.0" + flutter: ">=3.35.0" diff --git a/pubspec.yaml b/pubspec.yaml index 07a52a3..fe8d858 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,31 +1,77 @@ name: hadi_hoda_flutter description: "A new Flutter project." publish_to: 'none' -version: 0.1.0 +version: 0.1.6+1 environment: sdk: ^3.9.2 dependencies: + auto_size_text: ^3.0.0 bloc: ^9.0.0 + confetti: ^0.8.0 dio: ^5.9.0 + easy_stepper: ^0.8.5+1 equatable: ^2.0.7 flutter: sdk: flutter + flutter_archive: ^6.0.3 flutter_bloc: ^9.1.1 flutter_localizations: sdk: flutter get_it: ^8.2.0 go_router: ^16.1.0 + hive: ^2.2.3 intl: ^0.20.2 + just_audio: ^0.10.5 + lottie: ^3.3.2 + path_drawing: ^1.0.1 + path_provider: ^2.1.5 pretty_dio_logger: ^1.4.0 shared_preferences: ^2.5.3 + showcaseview: ^5.0.1 + vector_graphics: ^1.1.19 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^5.0.0 + hive_generator: ^2.0.1 + build_runner: ^2.4.13 + vector_graphics_compiler: ^1.1.19 flutter: uses-material-design: true generate: true + + assets: + - assets/fonts/ + - assets/images/ + - assets/animations/ + - assets/audios/ + - path: assets/svg/ + transformers: + - package: vector_graphics_compiler + + + fonts: + - family: DinoKids + fonts: + - asset: assets/fonts/DinoKids-Regular.ttf + weight: 400 + - family: Marhey + fonts: + - asset: assets/fonts/Marhey-SemiBold.ttf + weight: 600 + - asset: assets/fonts/Marhey-Bold.ttf + weight: 700 + - family: Baloo_2 + fonts: + - asset: assets/fonts/Baloo2-Medium.ttf + weight: 500 + - asset: assets/fonts/Baloo2-SemiBold.ttf + weight: 600 + - asset: assets/fonts/Baloo2-Bold.ttf + weight: 700 + - asset: assets/fonts/Baloo2-ExtraBold.ttf + weight: 800 \ No newline at end of file